2012-01-10 41 views
9

Có sự khác biệt nào giữa hai điều sau không?Có sự khác biệt nào giữa MsgBox và MessageBox.Show không?

msgbox() 
messagebox.show() 

Một số hướng dẫn sử dụng MsgBox(), và một số sử dụng khác, messagebox.show() --- Tôi thấy rằng cả hai có thể có một phong cách thể chỉnh sửa, nhưng tôi đã tự hỏi: Tại sao có hai?

Ứng dụng có phù hợp với các lập trình viên cũ hơn (những người đã học trên phiên bản cũ hơn của Visual Basic) không?

Vì vậy, trong trường hợp đó, tôi nên sử dụng cái nào trong Visual Basic 2010 (Visual Studio 2010)?

Trả lời

10

MsgBox() giống với Messagebox.Show().

Nó tồn tại cho các lập trình viên VB6 đã quen với nó.

Không có quy tắc nào để sử dụng, nhưng kể từ MsgBox chỉ cần kết thúc ủy quyền cho MessageBox, cá nhân tôi sẽ truy cập trực tiếp với MessageBox.

+0

+1 Mặc dù nó chủ yếu tồn tại * cho khả năng tương thích ngược * với mã VB6 đang hoạt động hiện tại. – MarkJ

+0

Tôi nhận thấy rằng tôi không thể gọi MessageBox từ thư viện không phải GUI. Có vẻ như tôi sẽ cần phải tham khảo/nhập khẩu System.Windows.Forms để sử dụng nó trong thư viện, nhưng điều đó sẽ làm hỏng lý do tôi đang sử dụng một thư viện. MsgBox hoạt động tốt (để chuyển tiếp thông tin đến ứng dụng GUI cha), do đó, có ít nhất một sự khác biệt. –

4

Đây là mã nguồn cho Msgbox. Như bạn có thể thấy nó không làm bất cứ điều gì đặc biệt thú vị trước khi gọi 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

Vì vậy, bạn đang cố gắng để nói rằng MsgBox là giống như MessageBox và có thể được sử dụng một trong hai? –

+1

Tất nhiên có thể được sử dụng. Nhưng đối với sự phát triển chuyên nghiệp nó được coi là hình thức nghèo để sử dụng MsgBox. –

+1

Ngoài ra, MsgBox sẽ cố gắng cast tất cả mọi thứ bạn ném vào nó (Kể từ khi giá trị thực hiện là Object, và nó sẽ ném một ngoại lệ tại thời gian chạy nếu có lỗi xảy ra khi đúc, mặc dù msdn nói rằng bạn phải cung cấp một chuỗi nó ..) trong khi Messagebox.Show là "nghiêm ngặt" hơn, chỉ chấp nhận giá trị String. Vì MsgBox sẽ gọi Messagebox.Show anyways, tại sao lại chọn "slow-route?" – SomeNickName

2

Hộp message tạo sử dụng MsgBox() có tiêu đề của hình thức mà tạo ra nó, trong khi các cửa sổ hộp thông báo tạo ra bởi MessageBox.Show() không có bất kỳ tiêu đề.

+2

Nó có một tiêu đề: 'MessageBox.Show (tin nhắn, tiêu đề, nút, biểu tượng)' – habakuk

2

Theo this site và câu trả lời cho đến câu hỏi của riêng tôi (xem nhận xét), cũng như không có khả năng hiển thị tệp trợ giúp cụ thể bằng chức năng msgbox, tôi phải nói sử dụng hộp thư chứ không phải msgbox nếu bạn muốn để được giúp đỡ. Hàm msgbox hiển thị một nút trợ giúp, nhưng dường như không có cách nào để đặt một tệp trợ giúp trong đó! Tôi đang hiển thị mã tôi đã chơi xung quanh với bên dưới và cũng có một mẫu mã tốt trên liên kết đầu tiên.

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, tôi đã hỏi một câu hỏi mới tại http://stackoverflow.com/questions/23350074/how-do-you-display- a-help-file-using-the-msgbox-not-messagebox-function-if-vb – Jim

3

Có sự khác biệt khi bạn cố gắng kết hợp các biểu tượng với các nút khác nhau. MsgBox có các kiểu định sẵn (có thể có cách để tạo kiểu mới).

Ví dụ:

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

enter image description here

^này sẽ hiển thị một hộp với Yes, No và Cancel không có biểu tượng.



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

enter image description here

^này sẽ hiển thị một hộp với một biểu tượng dấu hỏi nhưng với ONLY một nút OK.



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

enter image description here

^này sẽ hiển thị một hộp với Yes, No và Cancel VÀ một biểu tượng dấu hỏi.



Như bạn thấy, sử dụng MessageBox.Show cho phép bạn có bất kỳ nút nào bạn muốn với bất kỳ biểu tượng.

+0

Tôi vừa chỉnh sửa để thêm ảnh chụp màn hình. Tôi hi vọng cái này giúp được. – RHDxSPAWNx

+2

Cũng có thể được thực hiện với MsgBox: 'MsgBox (" Bạn có muốn lưu thay đổi không? ", MsgBoxStyle.Question HOẶC MsgBoxStyle.YesNoCancel," Save Changes ")' – habakuk

1

Nhưng điều thực sự thú vị về MsgBox là nó có thể là SystemModal, ví dụ: Nếu MsgBox ("Có một tin nhắn nhanh mới!" & Environment.NewLine & "Bạn có muốn đọc nó ngay bây giờ không?", MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal, "Quick Message") = MsgBoxResult.Yes sau đó ...

tôi không thể tìm thấy một cách đơn giản để làm cho Nếu MessageBox.Show (... là SystemModal.

thông điệp của tôi bây giờ có được đầy đủ nổi bật trên màn hình. Yippee.

Các vấn đề liên quan