- ベストアンサー
C#フォーム間のイベント駆動方法とは?
- C#のフォーム間でイベント駆動する方法について知りたいです。具体的には、Form1とForm2の間でチェックボックスの状態が変わったときに、それぞれのピクチャーボックスのイメージも変更したいです。静的変数を使ったり、Form1とForm2が分かれていない例が多く、解決策が見つかりません。
- C#の初心者です。Form1とForm2の間でイベント駆動する方法を教えてください。具体的には、Form2のチェックボックスの状態が変わったときに、Form1のピクチャーボックスのイメージも変更したいです。ネットで調べても良い解決策が見つからず、困っています。
- C#でフォーム間のイベント駆動方法について質問です。Form1とForm2の間でチェックボックスの状態が変わったときに、ピクチャーボックスのイメージも変更したいのですが、具体的な方法が分かりません。静的変数を使用する方法や、Form1とForm2が分かれていない例が多く、困っています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo2の質問への回答と補足 ちょっと質問の内容と回答が外れてしまい申し訳ありませんでした。 >> プログラミングの一般論として、こういう場合はデリゲートとイベントでやったほうが安全なんでしょうか? プログラミングの一般論としては申し訳ありませんがわかりません。 個人的にはプログラムを作成する際に後の見やすさを優先して作成するので、publicとDelegateどちらを使うかは遣りたい処理の内容で決めています。 参考程度にDelegate版も記述しておきます。 [Form1] public delegate void SetImageDgt(Bitmap bmp); public partial class Form1 : Form { private void SetImage(Bitmap bmp) { this.pictureBox1.Image = bmp; } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.dgSetImage = new SetImageDgt(SetImage); f2.Show(); } } [Form2] public partial class Form2 : Form { public Form2() { InitializeComponent(); } public SetImageDgt dgSetImage; private Bitmap bmp; private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (this.checkBox1.Checked == true) { bmp = イメージ1; } else { bmp = イメージ2; } dgSetImage(bmp); } }
その他の回答 (2)
- FoolWord
- ベストアンサー率73% (14/19)
Form2のチェックボックスイベントでForm1のピクチャーボックスを操作するという考え方でどうでしょう? [Form1] PicturBox1とPictureBox2をPublicにしておく。 Form2 f2 = new Form2(); // Form2を生成 f2.Show(this); // Form2を表示する時にForm1が親であることを教える [Form2] チェックボックスのCheckedChangeイベント Form1 f1 = (Form1)this.Owner; if ( this.checkBox1.Checked == true ) { f1.pictureBox1.Image = 表示したい画像1; } else { f1.pictureBox1.Image = 表示したい画像2; }
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
C++/CLIでそれっぽいことやってみた。
補足
本当にありがとうございます。まさにそういうことをやっています。まさに。 プログラミング自体が素人なもので、C++もよくわからないのですが、 まず、Form1に関してですが、 Form2でformというオブジェクトを作りますが、そのときにactionというメンバー関数をActionDelegate型でForm1のPutLabelと結び付けていますね(おそらく。自信はないのですが・・・) Form2ですが、 ActionDelegat型を宣言しその型でactionを生成し、その後はactionを関数として普通に使っています。 なるほど、なんとなくわかりました。 イベント発生元でデリゲートの型宣言・生成をし、イベントの受け元で結びつけと処理の記述をする。 ありがとうございます。参考になります。
お礼
ありがとうございます。今動きました。 確かに、親子の関係を利用して動かすのは考えていたんですよね(負け惜しみです)。 いろいろ探ったんですが、「コンテキストがありません」のエラーが取れなくて・・・ よくわかりました。ありがとうございます。 ただ、やはりpublicにするということの怖さが、一抹の不安がぬぐえません。 どうなんでしょう。 プログラミングの一般論として、こういう場合はデリゲートとイベントでやったほうが安全なんでしょうか? お考えを聞かせていただけないでしょうか?