2010-06-17 54 views

回答

16

你可能想要做这样的事情:

result = MsgBox ("Yes or No?", vbYesNo, "Yes No Example") 

Select Case result 
Case vbYes 
    MsgBox("You chose Yes") 
Case vbNo 
    MsgBox("You chose No") 
End Select 

要添加一个图标:

result = MsgBox ("Yes or No?", vbYesNo + vbQuestion, "Yes No Example") 

其他图标选项:

vbCritical or vbExclamation 
+0

我可以更改按钮上的字是从与其他字符串? – yael 2010-06-17 14:28:13

+2

没有,但作为JohnFx建议,你可以改写本声明的消息框,使“是”和“否”的选项会工作。 – 2010-06-17 14:42:00

0

无法完成。 MsgBox按钮只能有特定的值。
您必须为此滚动您自己的表单。

要创建具有两个选项(是/否)一个MsgBox:

MsgBox("Some Text", vbYesNo) 
+0

如果不是如何用VB两个可选按钮来创建? 耶尔 – yael 2010-06-17 14:19:45

3

VBScript Messagebox是相当有限的,以你可以应用到按钮上的标签,你的选择是非常限于:

  • OK
  • 取消
  • 重试
  • 中止
  • 忽略
  • 没有

所以,你将不得不如果你想建立自己的形式“ON” /“OFF”

更好的是,为什么不能改写的在框中提示,以便上述选项之一工作。

例如:

Do you want the light on? 
[Yes] [No] 

而偏偏做这些UI怪物之一!

Switch setting? (Click "yes" for ON and "No" for Off) 
[Yes] [No] 
0

记住 - 如果你将按钮设置为vbOkOnly - 它将始终返回1.

因此,您不能确定用户是否单击关闭或确定按钮。你只需要添加一个vbOk选项。

0

这是可以做到的,我发现它在网络上的其他地方......这是没办法我的工作! :)

Option Explicit 
' Import 
Private Declare Function GetCurrentThreadId Lib "kernel32"() As Long 

Private Declare Function SetDlgItemText Lib "user32" _ 
    Alias "SetDlgItemTextA" _ 
    (ByVal hDlg As Long, _ 
    ByVal nIDDlgItem As Long, _ 
    ByVal lpString As String) As Long 

Private Declare Function SetWindowsHookEx Lib "user32" _ 
    Alias "SetWindowsHookExA" _ 
    (ByVal idHook As Long, _ 
    ByVal lpfn As Long, _ 
    ByVal hmod As Long, _ 
    ByVal dwThreadId As Long) As Long 

Private Declare Function UnhookWindowsHookEx Lib "user32" _ 
    (ByVal hHook As Long) As Long 

' Handle to the Hook procedure 
Private hHook As Long 

' Hook type 
Private Const WH_CBT = 5 
Private Const HCBT_ACTIVATE = 5 

' Constants 
Public Const IDOK = 1 
Public Const IDCANCEL = 2 
Public Const IDABORT = 3 
Public Const IDRETRY = 4 
Public Const IDIGNORE = 5 
Public Const IDYES = 6 
Public Const IDNO = 7 

Public Sub MsgBoxSmile() 
    ' Set Hook 
    hHook = SetWindowsHookEx(WH_CBT, _ 
          AddressOf MsgBoxHookProc, _ 
          0, _ 
          GetCurrentThreadId) 

    ' Run MessageBox 
    MsgBox "Smiling Message Box", vbYesNo, "Message Box Hooking" 
End Sub 

Private Function MsgBoxHookProc(ByVal lMsg As Long, _ 
           ByVal wParam As Long, _ 
           ByVal lParam As Long) As Long 

    If lMsg = HCBT_ACTIVATE Then 
     SetDlgItemText wParam, IDYES, "Yes :-)" 
     SetDlgItemText wParam, IDNO, "No :-(" 

     ' Release the Hook 
     UnhookWindowsHookEx hHook 
    End If 

    MsgBoxHookProc = False 
End Function 
+0

您不能在VBScript中执行类似Windows API的调用。此代码是VBA或VB6 – Jobbo 2014-12-05 13:18:38

-1

我做

msgbox "TEXT HERE",3,"TITLE HERE" 
If Yes=true then 
(result) 

else 
msgbox "Closing..." 
+0

MsgBox应作为函数调用; Yes从哪里来? upvoter应该感到羞耻。 – 2017-10-16 18:06:34