2012-01-10 11 views
9

C'è una differenza tra i due seguenti?C'è una differenza tra MsgBox e MessageBox.Show?

msgbox() 
messagebox.show() 

Alcuni tutorial utilizzano msgbox(), e alcuni usano l'altro, messagebox.show() --- I vedere che entrambi possono avere uno stile modificabile, ma mi chiedevo: Perché ci sono due?

E 'adatto ai programmatori più anziani (che hanno imparato su una versione precedente di Visual Basic)?

Quindi, in tal caso, quale si deve utilizzare in Visual Basic 2010 (Visual Studio 2010)?

risposta

10

MsgBox() corrisponde a Messagebox.Show().

Esiste per i programmatori VB6 che sono abituati.

Non ci sono regole su cui utilizzare uno, ma poiché MsgBox termina semplicemente con la delega a MessageBox, personalmente andrei direttamente con MessageBox.

+0

+1 Anche se esiste principalmente * per compatibilità con le versioni precedenti * con codice VB6 funzionante già esistente. Anche i programmatori sheesh! C# sono prolissi :) – MarkJ

+0

Sto scoprendo che non posso chiamare MessageBox da una libreria non GUI. Sembrerebbe che avrei bisogno di fare riferimento/importare System.Windows.Forms per usarlo nella libreria, ma ciò rovinerebbe la ragione per cui sto usando una libreria. MsgBox funziona correttamente (per trasmettere informazioni all'applicazione della GUI principale), quindi c'è almeno una differenza. –

4

Ecco il codice sorgente per Msgbox. Come puoi vedere, non fa nulla di particolarmente interessante prima di chiamare 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 
+0

Quindi stai cercando di dire che MsgBox è uguale a messagebox e può essere utilizzato? –

+1

Ovviamente entrambi possono essere utilizzati. Ma per lo sviluppo professionale è considerata una forma scadente usare MsgBox. –

+1

Inoltre, MsgBox tenterà di eseguire il cast di tutto ciò che viene lanciato (poiché il valore assunto è Object e genererà un'eccezione in fase di esecuzione se si verifica un errore durante il casting, sebbene msdn affermi che è necessario fornire una stringa ..) mentre Messagebox.Show è più "strict", accettando solo il valore String. Poiché MsgBox chiamerà Messagebox.Show comunque, perché prendere il "percorso lento?" – SomeNickName

2

La finestra di messaggio creata usando MsgBox() ha un titolo del modulo che lo ha generato, mentre la finestra di finestra di messaggio creato da MessageBox.Show() non ha alcun titolo.

+2

Ha un titolo: 'MessageBox.Show (messaggio, titolo, pulsante, icona)' – habakuk

2

Secondo this site e le risposte finora alla mia stessa domanda (vedi osservazione), oltre alla mia impossibilità di visualizzare un file di aiuto specifico utilizzando la funzione msgbox, direi che uso messagebox anziché msgbox se vuoi per mostrare aiuto La funzione msgbox mostra un pulsante di aiuto, ma apparentemente non c'è modo di mettere un file di aiuto in esso! Sto mostrando il codice con cui ho giocato in giro e c'è anche un buon esempio di codice sul primo link.

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

Ok, ho fatto una nuova domanda su http://stackoverflow.com/questions/23350074/how-do-you-display- a-help-file-using-the-msgbox-not-messagebox-function-if-vb – Jim

3

C'è una differenza quando si tenta di mescolare le icone con pulsanti diversi. MsgBox ha stili predefiniti (potrebbe esserci un modo per creare nuovi stili).

Ad esempio:

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

enter image description here

^Verrà visualizzata una scatola con Sì, No e Annulla senza icona.



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

enter image description here

^Verrà visualizzata una casella con un punto di domanda ma con solo un pulsante OK.



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

enter image description here

^Verrà visualizzata una scatola con Sì, No e Annulla pulsanti e un punto di domanda.



Come si può vedere, utilizzando MessageBox.Show vi permette di avere tutti i tasti che desiderate con qualsiasi icona.

+0

Ho appena modificato per aggiungere screenshot. Spero che aiuti. – RHDxSPAWNx

+2

Può anche essere eseguito con MsgBox: 'MsgBox (" Vuoi salvare le modifiche? ", MsgBoxStyle.Question OR MsgBoxStyle.YesNoCancel," Salva modifiche ")' – habakuk

1

Ma la cosa veramente bella di MsgBox è che può essere SystemModal ad es. Se MsgBox ("C'è un nuovo messaggio rapido!" & Environment.NewLine & "Vuoi leggerlo ora?", MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal, "Messaggio rapido") = MsgBoxResult.Sì poi ...

non riuscivo a trovare un modo semplice di fare Se MessageBox.Show (... di essere SystemModal.

miei messaggi ora ottenere pieno risalto sullo schermo. Yippee.