以下兩者有區別嗎?MsgBox和MessageBox.Show有區別嗎?
msgbox()
messagebox.show()
一些教程採用的msgbox(),以及一些使用其他messagebox.show()---我看到兩個能有一個可編輯的風格,但我想知道:爲什麼有兩個?
它是否適應老程序員(誰已經學習了一個老版本的Visual Basic)?
那麼在那種情況下,我應該在Visual Basic 2010(Visual Studio 2010)中使用哪一個?
以下兩者有區別嗎?MsgBox和MessageBox.Show有區別嗎?
msgbox()
messagebox.show()
一些教程採用的msgbox(),以及一些使用其他messagebox.show()---我看到兩個能有一個可編輯的風格,但我想知道:爲什麼有兩個?
它是否適應老程序員(誰已經學習了一個老版本的Visual Basic)?
那麼在那種情況下,我應該在Visual Basic 2010(Visual Studio 2010)中使用哪一個?
MsgBox()
與Messagebox.Show()
相同。
它適用於習慣VB6的程序員。
有沒有規則使用哪一個,但由於MsgBox
只是結束委託給MessageBox
,我個人會直接與MessageBox
。
以下是Msgbox的源代碼。正如你所看到的,在調用MessageBox.Show之前,它沒有做任何特別有趣的事情。使用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
所以你試圖說MsgBox和messagebox是一樣的,可以使用嗎? – 2012-01-10 08:10:26
當然也可以使用。但對於職業發展來說,使用MsgBox被認爲是不好的形式。 – 2012-01-10 08:11:32
此外,MsgBox會嘗試投射你所投的所有東西(因爲所採用的值是Object,並且如果在投射時發生任何錯誤,它將在運行時拋出一個異常,儘管msdn指出你必須爲它提供一個字符串..)而Messagebox.Show更「嚴格」,只接受String值。由於MsgBox會調用Messagebox.Show,爲什麼要採取「慢路徑?」 – SomeNickName 2014-04-29 23:27:24
根據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
好吧,我確實在http://stackoverflow.com/questions/23350074/how-do-you-display- a-help-file-using-the-msgbox-not-messagebox-function-if-vb – Jim 2014-04-28 20:31:56
當您嘗試將圖標與不同的按鈕混合時,會有所不同。 MsgBox具有預定義的樣式(可能有創建新樣式的方法)。
例如:
MsgBox("Do you wish to save changes?", MsgBoxStyle.YesNoCancel, "Save Changes")
^這將顯示用是,否一個盒子和取消按鈕沒有圖標。
MsgBox("Do you wish to save changes?", MsgBoxStyle.Question, "Save Changes")
^這將顯示一個問號圖標,但只有一個OK按鈕,一個盒子。
MessageBox.Show("Do you wish to save changes?", "Save Changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
^這將顯示一個方塊,是,否和取消按鈕和問號圖標。
正如你可以看到,使用MessageBox.Show使你有你想要的任何圖標任何按鈕。
我剛編輯添加屏幕截圖。我希望這有幫助。 – RHDxSPAWNx 2014-06-13 18:47:22
也可以用MsgBox完成:'MsgBox(「你想保存更改嗎?」,MsgBoxStyle.Question或MsgBoxStyle.YesNoCancel,「保存更改」)' – habakuk 2014-10-06 12:26:47
但MsgBox的真正好處在於它可以是SystemModal,例如如果MsgBox(「有一個新的快速消息!」& Environment.NewLine &「你想現在閱讀嗎?」,MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.SystemModal,「快速消息」)= MsgBoxResult.Yes然後...
我找不到讓如果MessageBox.Show(...是系統模式的簡單方式。
我的郵件現在在屏幕上得到充分的重視。yippee的。
+1。儘管它主要存在*用於向後兼容*與現有的VB6工作代碼。另外 - sheesh!C#程序員是冗長的:) – MarkJ 2012-11-01 12:15:40
我發現我無法從非GUI庫調用MessageBox。似乎我需要引用/導入System.Windows.Forms以在庫中使用它,但這會破壞我使用庫的原因。 MsgBox工作正常(將信息傳遞給父GUI應用程序),所以至少有一個區別。 – 2015-08-14 17:30:50