自己レスです。 調べた結果下記のようにOwner にて元のメソットを呼べそうです。 もっとスマート(汎用的な?)処理がありそうですが現在はこれですすめたい思います ■フォーム1 private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); frm2.Owner = this; frm2.ShowDialog(); } public void test(string work) { MessageBox.Show(work); } ■フォーム2 private void Form2_Load(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { listBox1.Items.Add(i); } } private void listBox1_DoubleClick(object sender, EventArgs e) { string work = listBox1.SelectedItems[0].ToString(); ((Form1)this.Owner).test(work); }
子から親を操作するのは行儀が悪いので、 要件どおり、子から親に通知するようにすると良いです。 具体的にはフォーム2に DataSelected イベントを実装して、フォーム1で受けます。 リストボックスの SelectedValueChanged イベントをフォームで受けるのと同じです。 ■フォーム1 private void button1_Click(object sender, EventArgs e) { var frm2 = new Form2(); frm2.DataSelected += new EventHandler(frm2_DataSelected); frm2.Show(this); } private void frm2_DataSelected(object sender, EventArgs e) { MessageBox.Show(“Data Selected!"); } ■フォーム2 public event EventHandler DataSelected; private void button1_Click(object sender, EventArgs e) { DataSelected(this, new EventArgs()); }