我想重载 VB.Net 内置MsgBox()
函数。
我想在每次弹出 MsgBox 时添加哔哔声,但宁愿不创建新函数,例如 MsgBoxWithBeep()
,并在我现有的代码中执行一大堆查找/替换。
我可以在模块中很好地做到这一点:
Public Sub MsgBox(msg As String)
Beep()
MsgBox(msg)
End Sub
但是,当然,这最终会成为一个无休止的递归循环。
我不能做MyBase.MsgBox()
因为这不是一个类。
是否有一个所有内置函数都使用的假设类,以便我可以做一些类似VbNetBaseClass.MsgBox()
或其他方式来恢复原始函数?
一个简单的解决方案是使用 MsgBox 调用 MessageBox.Show,如下所示:
Public Sub MsgBox(msg As String)
Beep()
MessageBox.Show(msg, Me.Text, MessageBoxButtons.OK)
End Sub
或者更好的是,使用已经发出哔哔声的感叹号/错误图标:
Public Sub MsgBox(msg As String)
MessageBox.Show(msg, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub
_
编辑:来自黑木的好点...如果需要结果,可以将其转换为函数:
Public Function MsgBox(msg As String, _
Optional title As String = "", _
Optional msgButtons As MessageBoxButtons = MessageBoxButtons.OK, _
Optional msgIcon As MessageBoxIcon = MessageBoxIcon.None) _
As System.Windows.Forms.DialogResult
Return MessageBox.Show(msg, title, msgButtons, msgIcon)
End Function
我不相信您将能够覆盖或重载MsgBox()
方法,因为它static
和标准模块(而不是类),如源代码中的此处所示:
[StandardModule]
public sealed class Interaction
{
/* Other methods omitted for brevity */
public static MsgBoxResult MsgBox(object Prompt, MsgBoxStyle Buttons = MsgBoxStyle.ApplicationModal, object Title = null);
}
最好的选择是编写自己的方法或包装器来处理使用可选重载等调用它。