0

私は VB に関する 200 の短いビデオ チュートリアルを進めていますが、メッセージ ボックスを扱うビデオ チュートリアルでは、インストラクターが Else If ステートメントを使用してさらにいくつかのボタンに応答するように求めています。動作する前に [再試行] ボタンを 2 回クリックする必要があり、動作する前に [無視] ボタンを 3 回クリックする必要があることを除いて、動作するようになりました。誰かが私が間違っていることを教えてもらえますか? 私のコードは以下です。

Private Sub btnShowMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowMsg.Click

    If MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Abort Then
        MessageBox.Show("Hey, you Aborted me!")

    ElseIf MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Retry Then
        MessageBox.Show("You are trying to retry, aren't you?")

    ElseIf MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Ignore Then
        MessageBox.Show("Don't you dare ignore me!!")

    End If
End Sub
4

3 に答える 3

0

最悪の場合、3 つのメッセージ ボックス (各If/句に 1 つ) を作成していますが、メッセージ ボックスは 1 つだけ作成する必要があります。ElseIf

最初にメッセージ ボックスの結果を保存します。

' create only one MessageBox and store the result '
Dim result = MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question)

If result = Windows.Forms.DialogResult.Abort Then
    ...
ElseIf result = Windows.Forms.DialogResult.Retry Then
    ...
ElseIf ...
   ...
于 2013-10-01T12:48:52.433 に答える
0

MessageBox.Showメソッドを呼び出すたびにnew MessageBoxが表示され、new DialogResultが返されることを理解してください。

ロジックをさらに単純化するために、次の疑似コードを検討してください。

If MessageBox.Show Result = Abort
    Show You Aborted Me
Else If MessageBox.Show Result = Retry
    Show You Clicked Retry
Else If MessageBox.Show.Result = Ignore
    Show You Ignored Me

が最初に表示されたときにユーザーが [中止] 以外をクリックすると、ランタイムは 2 番目のステートメントMessageBoxの実行を開始しますIf MessageBox

このプロセスは、ユーザーがステートメントの条件を満たすか、考慮すべきステートメントIfがなくなるまで繰り返さIfれます。

この問題を解決するにはMessageBox、 がユーザーに 1 回だけ表示されるようにする必要があります。DialogResultをローカル変数に格納してから、 を評価しDialogResultます。

Dim result as DialogResult = MessageBox.Show("Click Something", "Make a Selection", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Question) 

If result = DialogResult.Abort Then
    MessageBox.Show("Hey, you Aborted me!")
ElseIf result = DialogResult.Retry Then
    MessageBox.Show("You are trying to retry, aren't you?")
ElseIf result = DialogResult.Ignore Then
    MessageBox.Show("Don't you dare ignore me!!")
Else 
    ' What are you going to do if the user never clicks an applicable button? 
End If
于 2013-10-01T13:00:44.493 に答える