MsgBox 和 MessageBox.Show 有区别吗?

问题描述 投票:0回答:7

以下两者有区别吗?

 msgbox()
 messagebox.show()

有些教程使用 msgbox(),有些使用另一个,messagebox.show()——我看到两者都可以有可编辑的样式,但我想知道:为什么有两个?

它是为了适应老程序员(他们已经学习过旧版本的 Visual Basic)吗?

那么在这种情况下,我应该在 Visual Basic 2010 (Visual Studio 2010) 中使用哪一个?

vb.net visual-studio-2010
7个回答
15
投票

MsgBox()
Messagebox.Show()
相同。

它是为习惯了它的 VB6 程序员而存在的。

没有关于使用哪一个的规则,但由于

MsgBox
最终只是委托给
MessageBox
,我个人会直接使用
MessageBox


9
投票

这是

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

 

 

6
投票

当您尝试将图标与不同的按钮混合使用时,会出现差异。 MsgBox 有预定义的样式(可能有办法创建新样式)。

例如:

MsgBox("Do you wish to save changes?", MsgBoxStyle.YesNoCancel, "Save Changes")

enter image description here

^ 这将显示一个带有“是”、“否”和“取消”按钮但没有图标的框。



MsgBox("Do you wish to save changes?", MsgBoxStyle.Question, "Save Changes")

enter image description here

^ 这将显示一个带有问号图标的框,但只有一个“确定”按钮。



MessageBox.Show("Do you wish to save changes?", "Save Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

enter image description here

^ 这将显示一个带有是、否和取消按钮以及问号图标的框。



如您所见,使用 MessageBox.Show 使您可以拥有带有任何图标的任何按钮。


3
投票

但是 MsgBox 真正好的一点是它可以是 SystemModal,例如If MsgBox("有一条新的快速消息!" & Environment.NewLine & "现在要阅读吗?", MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal, "快速消息") = MsgBoxResult.Yes然后...

我找不到一种简单的方法来使 If MessageBox.Show(... 成为 SystemModal。

我的消息现在在屏幕上完全突出。耶皮。


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

0
投票

使用

MsgBox()
创建的消息框具有创建它的表单的标题,而使用
MessageBox.Show()
创建的消息框窗口没有任何标题。


0
投票

msgbox 可以是 ApplicationModal 或 SystemModal 使用 MsgBoxStyles 据我所知,MessageBox 只是 ApplicationModal。

© www.soinside.com 2019 - 2024. All rights reserved.