Как я могу показать окно с двумя кнопками?

Как я могу показать окно с двумя кнопками (например: "on", "off")?

Ответ 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

Ответ 2

VBScript Messagebox довольно ограничен в отношении меток, которые вы можете применить к кнопкам, ваш выбор в значительной степени ограничен:

  • OK
  • Отмена
  • Retry
  • Прервать
  • Игнорировать
  • Да
  • Нет

Итак, вам нужно будет создать свою собственную форму, если вы хотите "ON"/ "OFF"

Еще лучше, почему бы не перефразировать приглашение в поле, так что один из указанных выше вариантов работает.

Например:

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

И ради Бога не делать одно из этих монстров UI!

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

Ответ 3

Невозможно выполнить. MsgBox могут иметь только определенные значения.
Для этого вам придется катить свою форму.

Чтобы создать MsgBox с двумя параметрами (Да/Нет):

MsgBox("Some Text", vbYesNo)

Ответ 4

Помните - если вы установили кнопки в vbOkOnly - оно будет всегда возвращать 1.

Таким образом, вы не можете решить, щелкнул ли пользователь кнопку закрытия или кнопку ОК. Вам просто нужно добавить параметр vbOk.

Ответ 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

Ответ 6

Я сделал

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

else
msgbox "Closing..."