5

fromMain

DoSomething()
My.Forms.frmMessage.ShowDialog(Me)
If AcceptButtonClicked Then
' Do Code
DoCode()
Else
' Cancel Button Pressed
DoOtherCode()
End If
DoMore()

からのメッセージ

My.Forms.frmMain.AcceptButtonClicked = True

ダイアログ ウィンドウからメイン ウィンドウの一時停止したスレッドに値を渡す方法はありますか? ポップアップするフォームに入力した後、ユーザーが [OK] ボタンまたは [キャンセル] ボタンを押したかどうかを知りたいです。

4

4 に答える 4

7

DialogResultフォームでプロパティを使用できます。この値は、呼び出した ShowDialog 関数によって返されます。WinForms がフォーム プロパティの設定を処理するように、ボタンにこのプロパティを設定することもできます。

それfrmMessage に応じてプロパティを設定する必要があります(必要なものを選択してくださいOKCancel)。次に、戻り値を簡単に確認できます。

If My.Forms.frmMessage.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then
    ' OK button pressed
    DoCode()
Else
    ' Cancel button pressed
    DoOtherCode()
End If

ユーザーは、ボタンでフォームを閉じる以外の方法でフォームを閉じることができる場合があることを忘れないでください (たとえば、[閉じる] ボタンでフォームを閉じる)。

于 2013-07-31T22:35:41.967 に答える
6

Form に と プロパティを設定する必要がありますが、 のAcceptButtonプロパティをOK設定し、をCancelに設定する必要があります。CancelButtonAcceptButtonDialogResultCancelButton

このようにして、ユーザーがこれらのボタンのいずれかを押すと、ShowDialog 呼び出しが返され、列挙型 DialogResultの定義済みの値を使用して戻り値を確認できます。

DoSomething()
Dim result = My.Forms.frmMessage.ShowDialog(Me)
If result = DialogResult.OK Then
   ' Do Code
   DoCode()
Else
  ' Cancel Button Pressed
   DoOtherCode()
End If
DoMore()
于 2013-07-31T22:38:59.443 に答える
5

StyxxySteveによる回答はどちらもDialogResult、メイン ウィンドウでの処理に使用できます。ただし、ボタンのDialogResultプロパティAcceptはプロパティ ウィンドウで設定しないでください。検証後にコードで設定する必要があります。このようにして、ユーザーがフォームに不正なデータを入力した場合、最初からやり直すのではなく、エラー メッセージが表示され、作業を失うことなく修正できます。

'code in Dialog Form
Private Sub btnAccept_Click(sender As System.Object, e As System.EventArgs) Handles btnAccept.Click
    If IsValid() = True Then
        DialogResult = Windows.Forms.DialogResult.OK
    End If
End Sub
于 2014-06-04T20:54:13.653 に答える
1

Me.DialogResult = Windows.Forms.DialogResult.Abort Me.Close()

結果を返します Abort

于 2014-04-25T20:58:27.313 に答える