|
分類:[C#]
> 1.フォームA(ラベルとボタンを設置)とフォームB(ボタンを設置)を用意する。 > 2.フォームAに設置したボタンを押すとフォームBが呼び出される。 > 3.フォームBのボタンを押すと、フォームAの関数を呼び出す。
★案 1 ★ イベントを公開する。
//-------- Form1 (呼び出す側) -------- public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) { using (Form2 dialog = new Form2()) { dialog.ButtonClicked += new EventHandler(dialog_ButtonClicked); dialog.ShowDialog(); } }
void dialog_ButtonClicked(object sender, EventArgs e) { MessageBox.Show("Form1 内のメソッド"); } }
//-------- Form2 (呼び出される側) -------- public partial class Form2 : Form { public Form2() { InitializeComponent(); }
public event EventHandler ButtonClicked; private void button1_Click(object sender, EventArgs e) { if (ButtonClicked != null) ButtonClicked(sender, e); } }
★案 2 ★ デリゲートを渡す。
//-------- Form1 (呼び出す側) -------- public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void OnButtonClicked() { MessageBox.Show("Form1 内のメソッド"); } private void button1_Click(object sender, EventArgs e) { using (Form2 dialog = new Form2()) { dialog.ShowDialog(OnButtonClicked); } } }
//-------- Form2 (呼び出される側) -------- public partial class Form2 : Form { public Form2() { InitializeComponent(); }
public delegate void ButtonClicked(); private ButtonClicked OnButtonClicked; public DialogResult ShowDialog(ButtonClicked function) { OnButtonClicked = function; return base.ShowDialog(); } private void button1_Click(object sender, EventArgs e) { if (OnButtonClicked != null) OnButtonClicked(); } }
|