我一直遇到有关此缩小转换错误的问题
重载解析失败,因为没有缩小转换就无法调用可访问的“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()
我还检查过其他几个论坛,他们谈论这个错误,但特别是与“新”功能有关,他们似乎没有帮助。
对此的任何帮助都会很棒!
答案 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