2012-01-10 44 views
9

¿Hay alguna diferencia entre los dos siguientes?¿Hay alguna diferencia entre MsgBox y MessageBox.Show?

msgbox() 
messagebox.show() 

Algunos tutoriales utilizan MsgBox(), y algunos utilizan la otra, messagebox.show() --- veo que ambos pueden tener un estilo editable, pero me preguntaba: ¿Por qué hay dos?

¿Es para acomodar a programadores mayores (que han aprendido en una versión anterior de Visual Basic)?

Entonces, ¿en ese caso, cuál debería usar en Visual Basic 2010 (Visual Studio 2010)?

Respuesta

10

MsgBox() es lo mismo que Messagebox.Show().

Existe para los programadores VB6 que están acostumbrados.

No hay reglas sobre cuál usar, pero dado que MsgBox simplemente termina delegando en MessageBox, yo personalmente iría directamente con MessageBox.

+0

+1. Aunque existe principalmente * para la compatibilidad con versiones anteriores * con el código de trabajo VB6 existente. Además, los programadores de sheesh! C# son detallados :) – MarkJ

+0

Estoy descubriendo que no puedo llamar a MessageBox desde una biblioteca que no es GUI. Parece que necesitaría hacer referencia/importar System.Windows.Forms para usarlo en la biblioteca, pero eso arruinaría la razón por la que estoy usando una biblioteca. MsgBox funciona bien (para retransmitir información a la aplicación de GUI principal), por lo que hay al menos una diferencia. –

4

Aquí está el código fuente de Msgbox. Como puede ver, no hace nada particularmente interesante antes de llamar a 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

¿Está tratando de decir que MsgBox es lo mismo que messagebox y se puede usar? –

+1

Por supuesto, cualquiera puede ser utilizado. Pero para el desarrollo profesional se considera deficiente el uso de MsgBox. –

+1

Además, MsgBox intentará enviar todo lo que arroje (ya que el valor tomado es Objeto, y arrojará una excepción en el tiempo de ejecución si ocurre algún error al enviar, aunque msdn indica que debe proporcionarle una cadena). mientras que Messagebox.Show es más "estricto" y solo acepta el valor de cadena. Dado que MsgBox llamará a Messagebox.Show de todos modos, ¿por qué tomar la "ruta lenta"? – SomeNickName

2

El cuadro de mensaje creado usando MsgBox() tiene un título de la forma que lo creó, mientras que la ventana de cuadro de mensaje creado por MessageBox.Show() no tiene ningún título.

+2

Tiene un título: 'MessageBox.Show (mensaje, título, botón, icono)' – habakuk

2

De acuerdo con this site y las respuestas hasta ahora a mi propia pregunta (ver observación), así como mi incapacidad para mostrar un archivo de ayuda específico usando la función msgbox, tendría que decir use messagebox en vez de msgbox si quieres para mostrar ayuda. La función msgbox muestra un botón de ayuda, pero aparentemente no hay forma de poner un archivo de ayuda en él. Estoy mostrando el código con el que jugué a continuación, y también hay una buena muestra de código en el primer enlace.

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, hice una nueva pregunta en http://stackoverflow.com/questions/23350074/how-do-you-display- a-help-file-using-the-msgbox-not-messagebox-function-if-vb – Jim

3

Existe una diferencia cuando intenta mezclar iconos con botones diferentes. MsgBox tiene estilos predefinidos (puede haber una manera de crear nuevos estilos).

Por ejemplo:

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

enter image description here

^Esto mostrará una caja con Sí, No y Cancelar botones sin un icono.



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

enter image description here

^Esto mostrará una caja con un icono de signo de interrogación, pero con sólo un botón Aceptar.



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

enter image description here

^Esto mostrará una caja con Sí, No y Cancelar botones y un icono de signo de interrogación.



Como se puede ver, utilizando MessageBox.Show le permite tener ningún botón que desees, cualquier icono.

+0

Acabo de editar para agregar capturas de pantalla. Espero que esto ayude. – RHDxSPAWNx

+2

También se puede hacer con MsgBox: 'MsgBox (" ¿Desea guardar los cambios? ", MsgBoxStyle.Question O MsgBoxStyle.YesNoCancel," Guardar cambios ")' – habakuk

1

Pero lo realmente bueno de MsgBox es que puede ser SystemModal p. Si MsgBox ("Hay un nuevo mensaje rápido!" & Environment.NewLine & "¿Desea leerlo ahora?", MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal, "Quick Message") = MsgBoxResult.Sí entonces ...

no pude encontrar una forma sencilla de hacer Si MessageBox.Show (... sea SystemModal.

Mis mensajes reciben ahora la prominencia completo sobre la pantalla. Yupi.

Cuestiones relacionadas