Не удалось разрешить перегрузку, потому что никакое доступное «Show» не может быть вызвано без сужающего преобразования - PullRequest
0 голосов
/ 04 мая 2018

У меня возникли проблемы, связанные с этой ошибкой сужающего преобразования

Не удалось разрешить перегрузку, потому что никакое доступное «Show» не может быть вызвано без сужающего преобразования:

'Отображение общедоступной общей функции (владелец как System.Windows.Forms.IWin32Window, текст как строка, заголовок как строка, кнопки как System.Windows.Forms.MessageBoxButtons) как System.Windows.Forms.DialogResult': параметр сопоставления аргумента «владелец» сужается от «String» до «System.Windows.Forms.IWin32Window».

'Отображение общедоступной общей функции (владелец как System.Windows.Forms.IWin32Window, текст как строка, заголовок как строка, кнопки как System.Windows.Forms.MessageBoxButtons) в качестве System.Windows.Forms.DialogResult': параметр сопоставления аргумента «заголовок» сужается от «Microsoft.VisualBasic.MsgBoxStyle» до «String».

'Отображение общедоступной общей функции (владелец как System.Windows.Forms.IWin32Window, текст в виде строки, заголовок в виде строки, кнопки в виде System.Windows.Forms.MessageBoxButtons) в качестве System.Windows.Forms.DialogResult': параметр сопоставления аргумента «Кнопки» сужаются от «System.Windows.Forms.MessageBoxIcon» до «System.Windows.Forms.MessageBoxButtons».

'Открытая общая функция Показать (текст как строка, заголовок как строка, кнопки как System.Windows.Forms.MessageBoxButtons, значок как System.Windows.Forms.MessageBoxIcon) как System.Windows.Forms.DialogResult': параметр сопоставления аргумента «Кнопки» сужаются от «Microsoft.VisualBasic.MsgBoxStyle» до «System.Windows.Forms.MessageBoxButtons».

Я провел некоторое исследование, и универсальное решение для «Разрешение перегрузки не удалось, потому что нет доступного», не может быть вызвано без сужающего преобразования: «По словам Microsoft, ошибка заключается в задании Option Strict Off». Я попытался изменить это вручную в свойствах проекта, но это не сработало.

Это код, в котором происходит ошибка:

If MessageBox.Show("Please Enter a value for ESD (rad)", "ESD (rad) Value", MsgBoxStyle.OkCancel, MessageBoxIcon.Information) = DialogResult.OK Then
            txtCal_USE_Radio.Focus()

Я также проверил несколько других форумов, на которых они обсуждают эту ошибку, но они имеют непосредственное отношение к функции «New», и они, похоже, не помогают.

Любая помощь по этому вопросу будет отличной!

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы смешиваете свой MesssageBox с MsgBox. Замените MsgBoxStyle.OkCancel на синтаксис MessageBox.

If MessageBox.Show("Please Enter a value for ESD (rad)", "ESD (rad) Value", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) = DialogResult.OK Then
0 голосов
/ 04 мая 2018

Вы вызываете Show({string}, {MsgBoxStyle}, {MessageBoxIcon}), поэтому последняя перегрузка в сообщении об ошибке является ближайшей:

'Отображение общедоступной общей функции (текст как строка, заголовок как строка, кнопки как System.Windows.Forms.MessageBoxButtons, значок как System.Windows.Forms.MessageBoxIcon) как System.Windows.Forms.DialogResult': параметр сопоставления аргумента «Кнопки» сужаются от «Microsoft.VisualBasic.MsgBoxStyle» до «System.Windows.Forms.MessageBoxButtons».

Это Show({String}, {String}, {MessageBoxButtons}, {MessageBoxIcon}) - вам не хватает аргумента caption, и вместо MsgBoxStyle вы должны использовать перечисление MessageBoxButtons.

Звучит так, как будто у вас есть Option Strict On - это хорошо отлично - но, похоже, у вас также есть Imports Microsoft.VisualBasic, что по сути загрязняет ваш IntelliSense вещью с обратной совместимостью VB6, частью которого является MsgBoxStyle; это перечисление означает работать с устаревшей функцией MsgBox, которая MessageBox является более .NET-идиоматической заменой.

Отключение Option Strict было бы самым плохим решением: вы передаете неверный параметр, а компилятор говорит вам: «Я не могу преобразовать предоставленный тип в ожидаемый»; Последнее, что нужно сделать, это заставить его сказать: «Эй, не волнуйся, просто неявно преобразуй все вещи и взорвись вместо этого во время выполнения».

IntelliSense / autocomplete должна указывать вам, что делать при вводе аргументов в вызове функции ; повторно введите открывающую скобку ( и наблюдайте, как IntelliSense выделяет параметры и их соответствующие типы, когда вы используете клавиши со стрелками для перемещения каретки между аргументами, которые вы предоставляете.

...