web-dev-qa-db-ja.com

2つのボタンがあるメッセージボックスを表示するにはどうすればよいですか?

2つのボタンを持つメッセージボックスを表示するにはどうすればよいですか(例:"on""off")?

15
yael

おそらく次のようなことをしたいでしょう:

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
23
Sam Johnson

VBScript Messagebox は、ボタンに適用できるラベルに関してかなり制限されています。選択は次のようにほとんど制限されています。

  • OK
  • キャンセル
  • リトライ
  • アボート
  • 無視する
  • はい
  • 番号

「ON」/「OFF」が必要な場合は、独自のフォームを作成する必要があります

さらに良いことに、上記のオプションのいずれかが機能するように、ボックス内のプロンプトを言い換えないのはなぜですか。

例えば:

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

そして、神のためにしてはいけないこれらのUIの怪物の1つをしません!

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

覚えておいてください-ボタンをvbOkOnlyに設定すると、alwaysが1を返します。

したがって、ユーザーが閉じるボタンをクリックしたか、[OK]ボタンをクリックしたかを判断することはできません。 vbOkオプションを追加するだけです。

0
jave

それはできます、私はそれをウェブ上のどこかで見つけました...これは私の仕事ではありません! :)

    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
Peter Eden
msgbox ("Message goes here",0+16,"Title goes here")

ユーザーが決定することになっている場合、変数は次のように追加できます。

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

中央の数字は、メッセージボックスがどのように見えるかによって異なります。リストはこちら

0-OKボタンのみ

1-OKおよびキャンセル

2-中止、再試行、無視

3-はい、いいえ、キャンセル

4-はい、いいえ

5-再試行してキャンセル

記号を変更するには(右の番号)

16-重要なメッセージのアイコン

32-警告アイコン

48-警告メッセージ

64-情報メッセージ

デフォルトボタン

0 = vbDefaultButton1-最初のボタンはデフォルトです

256 = vbDefaultButton2-2番目のボタンがデフォルトです

512 = vbDefaultButton3-3番目のボタンがデフォルトです

768 = vbDefaultButton4-4番目のボタンがデフォルトです

システムモーダル

4096 =システムモーダル、アラートはすべてのアプリケーションの上に表示されます

注:追加の番号がいくつかあります。すでにそこにある数字にそれらを追加するだけです

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

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

0
Guy

できません。 MsgBox ボタンは特定の値のみを持つことができます。
このためには、独自のフォームをロールする必要があります。

2つのオプション(はい/いいえ)でMsgBoxを作成するには:

MsgBox("Some Text", vbYesNo)
0