重载分辨率失败,因为没有缩小转换就无法调用可访问的“显示”

时间:2018-05-04 16:58:24

标签: vb.net narrowing

我一直遇到有关此缩小转换错误的问题

  

重载解析失败,因为没有缩小转换就无法调用可访问的“Show”:

     

'公共共享函数显示(所有者为System.Windows.Forms.IWin32Window,文本为字符串,标题为字符串,按钮为System.Windows.Forms.MessageBoxButtons)As System.Windows.Forms.DialogResult':参数匹配参数'owner'从'String'缩小为'System.Windows.Forms.IWin32Window'。

     

'公共共享函数显示(所有者为System.Windows.Forms.IWin32Window,文本为字符串,标题为字符串,按钮为System.Windows.Forms.MessageBoxButtons)As System.Windows.Forms.DialogResult':参数匹配参数'caption'从'Microsoft.VisualBasic.MsgBoxStyle'缩小为'String'。

     

'公共共享函数显示(所有者为System.Windows.Forms.IWin32Window,文本为字符串,标题为字符串,按钮为System.Windows.Forms.MessageBoxButtons)As System.Windows.Forms.DialogResult':参数匹配参数'buttons'从'System.Windows.Forms.MessageBoxIcon'缩小到'System.Windows.Forms.MessageBoxButtons'。

     

'公共共享函数显示(text as String,caption As String,buttons As System.Windows.Forms.MessageBoxButtons,icon As System.Windows.Forms.MessageBoxIcon)As System.Windows.Forms.DialogResult':Argument matching parameter 'buttons'从'Microsoft.VisualBasic.MsgBoxStyle'缩小为'System.Windows.Forms.MessageBoxButtons'。

我做了一些研究,并且“过载分辨率失败,因为没有可访问的'可以在没有缩小转换的情况下调用'的通用解决方案:”错误是根据Microsoft指定Option Strict Off。我尝试在Project Properties中手动更改它,但它似乎不起作用。

这是发生错误的代码:

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

我还检查过其他几个论坛,他们谈论这个错误,但特别是与“新”功能有关,他们似乎没有帮助。

对此的任何帮助都会很棒!

2 个答案:

答案 0 :(得分:3)

您已调用Show({string}, {MsgBoxStyle}, {MessageBoxIcon}),因此错误消息中的最后一次重载是最接近的:

  

'公共共享功能显示(text as String,caption As String,buttons As System.Windows.Forms.MessageBoxButtons,icon As System.Windows.Forms.MessageBoxIcon)As System.Windows.Forms.DialogResult&#39 ;:参数匹配参数'按钮'来自' Microsoft.VisualBasic.MsgBoxStyle' to' System.Windows.Forms.MessageBoxButtons'。

那个Show({String}, {String}, {MessageBoxButtons}, {MessageBoxIcon}) - 您错过了caption参数,而不是MsgBoxStyle,您应该使用MessageBoxButtons枚举。

听起来你有Option Strict On - 非常好 - 但似乎你也有Imports Microsoft.VisualBasic,这实质上污染了你的 IntelliSense < / em>与VB6反向兼容的东西,MsgBoxStyle是其中的一部分;该枚举意味着使用遗留的MsgBox函数,MessageBox更适合.NET替代。

关闭Option Strict将是最糟糕的事情 - 你传递了一个错误的参数,编译器告诉你&#34;我无法将提供的类型转换为预期的一个&#34 ;;最后要做的就是让它说'嘿嘿,不要担心,只是隐含地转换所有的东西,而不是在运行时炸掉#34;。

当您在函数调用中键入参数时,

IntelliSense / autocomplete应该告诉您该怎么做;重新键入左括号(并观察 IntelliSense 突出显示参数及其各自类型,方法是使用箭头键将插入符号移动到您正在提供的参数上。

答案 1 :(得分:0)

您正在将MesssageBox与MsgBox Change MsgBoxStyle.OkCancel混合为MessageBox语法。

If MessageBox.Show("Please Enter a value for ESD (rad)", "ESD (rad) Value", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) = DialogResult.OK Then