Есть ли разница между MsgBox и MessageBox.Show? - PullRequest
9 голосов
/ 10 января 2012

Есть ли разница между следующими двумя?

 msgbox()
 messagebox.show()

В некоторых руководствах используется msgbox (), а в других - messagebox.show () - я вижу, что оба могут иметь редактируемыестиль, но мне было интересно: почему их два?

Разве это для старших программистов (которые учились на более старой версии Visual Basic)?

Так что в этом случае, какойя должен использовать в Visual Basic 2010 ( Visual Studio 2010 )?

Ответы [ 6 ]

10 голосов
/ 10 января 2012

MsgBox() совпадает с Messagebox.Show().

Он существует для программистов VB6, которые привыкли к нему.

Нет правил, по которым можно использовать, но, поскольку MsgBox просто заканчивает делегирование MessageBox, я лично пошел бы непосредственно с MessageBox.

4 голосов
/ 10 января 2012

Вот исходный код 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
3 голосов
/ 12 июня 2014

Существует разница, когда вы пытаетесь смешивать значки с разными кнопками.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 позволяет вам иметь любые кнопки с любым значком.

2 голосов
/ 28 апреля 2014

Согласно этому сайту и ответам на мой собственный вопрос (см. Примечание), а также моей неспособности отобразить конкретный файл справки с помощью функции 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
2 голосов
/ 01 ноября 2012

Окно сообщения, созданное с помощью MsgBox(), имеет заголовок формы, в которой оно было создано, тогда как окно сообщения, созданное с помощью MessageBox.Show(), не имеет заголовка.

1 голос
/ 03 ноября 2015

Но что действительно хорошо в MsgBox, так это то, что он может быть SystemModal, например If MsgBox («Есть новое быстрое сообщение!» & Environment.NewLine & «Вы хотите прочитать его сейчас?», MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal, "Quick Message") = MsgBoxResult.Yes Тогда ...

Я не смог найти простой способ создания If MessageBox.Show (... должен быть SystemModal.

Мои сообщения теперь становятся заметными на экране. Yippee.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...