下図のようなフォームの表示を例に
フォームで押されたボタンの種類を表示元で取得するサンプルを示します。
Form1よりForm2を呼び出し、
Form2が閉じられた際に
Form2で押されたボタンの種類を
Form1側(表示元)で取得します。
例)
Form1
┏━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃┏━━━━┓ ┃
┃┃button1 ┃ ┃
┃┗━━━━┛ ┃
┗━━━━━━━━━━━┛
button1押下でForm2を表示
↓Form2を表示
Form2
┏━━━━━━━━━━━━┓
┃ ┃
┃ ┃
┃┏━━━┓ ┏━━━━┓┃
┃┃ OK ┃ ┃ Cancel ┃┃
┃┗━━━┛ ┗━━━━┛┃
┗━━━━━━━━━━━━┛
いずれかのボタン押下で閉じる。
【解説】
呼び出し元では、フォームが閉じられた後で
DialogResultプロパティーの値を参照することで
何のボタンが押されたのかを判断します。
呼び先では、各ボタンのDialogResultプロパティーに
DialogResult列挙型の値をあらかじめ設定しておくことで
呼び出し元に最後に押されたボタンの種類を通知します。
C#
//-------------------------------------
// Form1のソース
//-------------------------------------
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f2 = new Form2();
// Form2をモーダル表示
f2.ShowDialog();
// Form2が閉じられた後、どのボタンが押されたのか判定
switch( f2.DialogResult )
{
case DialogResult.OK:
MessageBox.Show( "OK", "押されたボタンは" );
break;
case DialogResult.Cancel:
MessageBox.Show( "Cancel", "押されたボタンは" );
break;
}
}
//-------------------------------------
// Form2のソース
//-------------------------------------
private void Form2_Load(object sender, System.EventArgs e)
{
button1.DialogResult = DialogResult.OK;
button2.DialogResult = DialogResult.Cancel;
}
VB.NET
'-------------------------------------
' Form1のソース
'-------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim f2 As Form2 = New Form2
f2.ShowDialog()
Select Case f2.DialogResult
Case DialogResult.OK
MessageBox.Show("OK", "押されたボタンは")
Case DialogResult.Cancel
MessageBox.Show("Cancel", "押されたボタンは")
End Select
End Sub
'-------------------------------------
' Form2のソース
'-------------------------------------
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button1.DialogResult = DialogResult.OK
Button2.DialogResult = DialogResult.Cancel
End Sub
VC.NET
//-------------------------------------
// Form1のソース
//-------------------------------------
#include "Form2.h"
private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
Form2 *f2 = new Form2();
f2->ShowDialog();
switch( f2->DialogResult )
{
case DialogResult::OK:
MessageBox::Show( "OK", "押されたボタンは" );
break;
case DialogResult::Cancel:
MessageBox::Show( "Cancel", "押されたボタンは" );
break;
}
}
//-------------------------------------
// Form2のソース
//-------------------------------------
private: System::Void Form2_Load(System::Object * sender, System::EventArgs * e)
{
button1->DialogResult = DialogResult::OK;
button2->DialogResult = DialogResult::Cancel;
}
【補足】
ボタンの種類は DialogResult列挙型 で定義されています。
+-----------+------------------------+
| 値 | 内容 |
+-----------+------------------------+
| Abort | 中止 |
| Cancel | キャンセル |
| Ignore | 無視 |
| No | いいえ |
| None | 既定値(デフォルト) |
| OK | OK |
| Retry | 再試行 |
| Yes | はい |
+-----------+------------------------+