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

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

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

«Отображение общедоступной общей функции (владелец как 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': Параметр соответствия аргумента 'caption' сужается от «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».

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

Это код, в котором возникает ошибка:

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

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

Любая помощь в этом будет здорово!


person Shoc    schedule 04.05.2018    source источник
comment
Ошибка говорит вам, что не так 2ce. Microsoft.VisualBasic.MsgBoxStyle.OkCancel предназначен для использования с устаревшим MsgBox() и не совпадает с MessageBoxButtons.OKCancel из пространства имен Winforms. Intellisense поможет вам в этом, если вы позволите. Пожалуйста, прочитайте Как спросить и пройдите тур   -  person Ňɏssa Pøngjǣrdenlarp    schedule 04.05.2018


Ответы (2)


Вы вызываете 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 выделяет параметры и их соответствующие типы, когда вы используете клавиши со стрелками для перемещения курсора по аргументам, которые вы предоставляете.

person Mathieu Guindon    schedule 04.05.2018
comment
Спасибо за помощь! Я получил этот код от другого человека, который работал над ним, и это был беспорядок! Не было никаких комментариев, и они не дали мне никакого направления, так что это очень помогло мне! - person Shoc; 04.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
person Mary    schedule 05.05.2018