【问题标题】:How can I show a message box with two buttons?如何显示带有两个按钮的消息框?
【发布时间】:2010-06-17 14:13:48
【问题描述】:

如何显示带有两个按钮的消息框(例如:"on""off")?

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    你可能想做这样的事情:

    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
    

    【讨论】:

    • 我可以将按钮上的单词从yes更改为其他字符串吗?
    • 不,但正如 JohnFx 建议的那样,您可以在消息框中重新表述该语句,以便“是”和“否”选项起作用。
    【解决方案2】:

    VBScript Messagebox 对于您可以应用于按钮的标签非常有限,您的选择非常有限:

    • 好的
    • 取消
    • 重试
    • 中止
    • 忽略
    • 是的
    • 没有

    因此,如果您想要“开”/“关”,您将不得不构建自己的表单

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

    例如:

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

    看在上帝的份上不要做这些 UI 怪物之一!

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

    【讨论】:

      【解决方案3】:

      请记住 - 如果您将按钮设置为 vbOkOnly - 它会始终返回 1。

      因此,您无法确定用户是单击了关闭还是单击了确定按钮。您只需添加一个vbOk 选项。

      【讨论】:

        【解决方案4】:

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

        使用两个选项(是/否)创建一个 MsgBox:

        MsgBox("Some Text", vbYesNo)
        

        【讨论】:

          【解决方案5】:

          可以,我在网上其他地方找到的...这不是我的工作! :)

              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
          

          【讨论】:

          • 您不能在 VBScript 中进行 Windows API 调用。此代码是 VBA 或 VB6
          【解决方案6】:
          msgbox ("Message goes here",0+16,"Title goes here")
          

          如果用户应该做出决定,则可以像这样添加变量。

          variable=msgbox ("Message goes here",0+16,"Title goes here")
          

          中间的数字会改变消息框的外观。 这是列表

          0 - 仅确定按钮

          1 - 确定并取消

          2 - 中止、重试和忽略

          3 - 是 否 并取消

          4 - 是和否

          5 - 重试并取消

          更改符号(正确的数字)

          16 - 重要消息图标

          32 - 警告图标

          48 - 警告信息

          64 - 信息消息

          默认按钮

          0 = vbDefaultButton1 - 第一个按钮是默认的

          256 = vbDefaultButton2 - 第二个按钮是默认的

          512 = vbDefaultButton3 - 第三个按钮是默认的

          768 = vbDefaultButton4 - 第四个按钮是默认的

          系统模式

          4096 = 系统模式,警报将在所有应用程序之上

          注意:还有一些额外的数字。您只需要将它们添加到已经存在的数字中,例如

          msgbox("Hello World", 0+16+0+4096)
          

          来自https://www.instructables.com/id/The-Ultimate-VBS-Tutorial/

          【讨论】:

            【解决方案7】:

            我做到了

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

            【讨论】:

            • MsgBox 应该作为函数调用;是从哪里来的?赞成者应该感到羞耻。
            【解决方案8】:

            可以在 2021 年制作像 Msgboxes 一样简单的自定义对话框!请注意,这是针对 VB,而不是 VB 脚本。

            首先使用对话框模板制作一个新表单。它已经包含两个框,您可以更改其中的名称/文本:

            然后回到你的主代码中,把这个,“Dialog1”是你的新对话框的名称。这允许您将此表单视为一个 msgbox,只需一行代码:

            Dim dialogInstance As New Dialog1
            Dim result As dialogResult = dialogInstance.ShowDialog()
            

            变量“结果”的行为类似于传统的确定/取消消息框,与上述选项完全相同,但会在按钮上显示您的自定义文本。从这里您可以将自定义图片添加到您的 msgbox 等等!

            【讨论】:

            • 问题是针对 VBScript 的。您的答案是针对 VB (Visual Basic)。它们是非常不同的动物。
            猜你喜欢
            • 2021-09-24
            • 2020-07-31
            • 2012-07-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多