以下两个之间有区别吗?
msgbox()
messagebox.show()
有些教程使用msgbox(),有些使用另一个,messagebox.show()---我看到两者都有可编辑的样式,但我想知道:为什么有两个?
是否适应年龄较大的程序员(在较旧版本的Visual Basic上学习过)?
那么在这种情况下,我应该在Visual Basic 2010中使用哪一个(Visual Studio 2010)?
答案 0 :(得分:10)
MsgBox()
与Messagebox.Show()
相同。
适用于习惯的VB6程序员。
没有关于使用哪个规则的规则,但由于MsgBox
只是最终委托给MessageBox
,我个人会直接使用MessageBox
。
答案 1 :(得分:4)
以下是Msgbox的源代码。正如您所看到的,在调用MessageBox.Show之前它没有做任何特别有趣的事情。
<MethodImpl(MethodImplOptions.NoInlining), HostProtection(SecurityAction.LinkDemand, Resources:=HostProtectionResource.UI)> _
Public Shared Function MsgBox(ByVal Prompt As Object, ByVal Optional Buttons As MsgBoxStyle = 0, ByVal Optional Title As Object = new Object()) As MsgBoxResult
Dim owner As IWin32Window = Nothing
Dim text As String = Nothing
Dim titleFromAssembly As String
Dim vBHost As IVbHost = HostServices.VBHost
If (Not vBHost Is Nothing) Then
owner = vBHost.GetParentWindow
End If
If ((((Buttons And 15) > MsgBoxStyle.RetryCancel) OrElse ((Buttons And 240) > MsgBoxStyle.Information)) OrElse ((Buttons And &HF00) > MsgBoxStyle.DefaultButton3)) Then
Buttons = MsgBoxStyle.OkOnly
End If
Try
If (Not Prompt Is Nothing) Then
[text] = CStr(Conversions.ChangeType(Prompt, GetType(String)))
End If
Catch exception As StackOverflowException
Throw exception
Catch exception2 As OutOfMemoryException
Throw exception2
Catch exception3 As ThreadAbortException
Throw exception3
Catch exception9 As Exception
Throw New ArgumentException(Utils.GetResourceString("Argument_InvalidValueType2", New String() { "Prompt", "String" }))
End Try
Try
If (Title Is Nothing) Then
If (vBHost Is Nothing) Then
titleFromAssembly = Interaction.GetTitleFromAssembly(Assembly.GetCallingAssembly)
Else
titleFromAssembly = vBHost.GetWindowTitle
End If
Else
titleFromAssembly = Conversions.ToString(Title)
End If
Catch exception4 As StackOverflowException
Throw exception4
Catch exception5 As OutOfMemoryException
Throw exception5
Catch exception6 As ThreadAbortException
Throw exception6
Catch exception13 As Exception
Throw New ArgumentException(Utils.GetResourceString("Argument_InvalidValueType2", New String() { "Title", "String" }))
End Try
Return DirectCast(MessageBox.Show(owner, [text], titleFromAssembly, (DirectCast(Buttons, MessageBoxButtons) And DirectCast(15, MessageBoxButtons)), (DirectCast(Buttons, MessageBoxIcon) And DirectCast(240, MessageBoxIcon)), (DirectCast(Buttons, MessageBoxDefaultButton) And DirectCast(&HF00, MessageBoxDefaultButton)), (DirectCast(Buttons, MessageBoxOptions) And DirectCast(-4096, MessageBoxOptions))), MsgBoxResult)
End Function
答案 2 :(得分:3)
当您尝试使用不同按钮混合图标时,会有所不同。 MsgBox具有预定义样式(可能有一种创建新样式的方法)。
例如:
MsgBox("Do you wish to save changes?", MsgBoxStyle.YesNoCancel, "Save Changes")
^这将显示一个包含Yes,No和Cancel按钮但没有图标的框。
MsgBox("Do you wish to save changes?", MsgBoxStyle.Question, "Save Changes")
^这将显示一个带有问号图标的框,但只有一个OK按钮。
MessageBox.Show("Do you wish to save changes?", "Save Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
^这将显示一个包含是,否和取消按钮以及问号图标的框。
正如您所看到的,使用MessageBox.Show可以让您使用任何图标获得所需的任何按钮。
答案 3 :(得分:2)
使用MsgBox()
创建的消息框具有创建它的表单的标题,而MessageBox.Show()
创建的消息框窗口没有任何标题。
答案 4 :(得分:2)
根据this site以及到目前为止我自己的问题(请参阅注释)的答案,以及我无法使用msgbox函数显示特定的帮助文件,我不得不说使用messagebox而不是如果你想显示帮助,请使用msgbox。 msgbox函数显示一个帮助按钮,但显然无法在其中放入帮助文件!我在下面展示了我玩过的代码,第一个链接上也有一个很好的代码示例。
Imports Microsoft.visualbasic 'have to have this namespace to use msgbox
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Helpfilepath As String = "C:\Windows\Help\mui\0409\aclui.chm"
Dim msgresult As Byte
'BTW, Must use 0 for BLANK PARAMETER. Using messageboxoptions.defaultdesktoponly errors out with help btn.
msgresult = MessageBox.Show("Text", "Messagebox", 0, _
0, 0, 0, Helpfilepath)
'displays help button, but how do you display the help file?
msgresult = MsgBox("Text", MsgBoxStyle.MsgBoxHelp, "msgbox")
'BTW, must use dialogresult rather than messageboxresult with windows forms
If msgresult = DialogResult.Yes Then
'etc
End If
End Sub
End Class
答案 5 :(得分:1)
但是关于MsgBox的真正好处是它可以是SystemModal,例如如果MsgBox(“有一个新的快速消息!”&amp; Environment.NewLine&amp;“你想现在读它吗?”,MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal,“Quick Message”) = MsgBoxResult.Yes然后......
我找不到一个简单的方法来制作 If MessageBox.Show(... 是SystemModal。
我的消息现在在屏幕上显得非常突出。 YIPPEE。