プロが教えるわが家の防犯対策術!

すごく基本的なことかもしれないのですが、ポインタだけでも良いので教えてください。

あるFormにPictureBoxをはりつけてあります。
PictureBoxをマウスでクリックしたときにpictureBox_Click()イベントが発生しますが、このイベントをそのままスルーして、Formに伝えてあげたいのです。
pictureBox.Parent.OnMouseDown()とでもすればいいのかと思っていたのですが、コンパイルエラーでした。
何かすごい勘違いをしているような気もするのですが、お恥ずかしいことに何が悪いのかよくわかりません。ポインタだけでも良いので、どうすれば親にイベントを投げられるのかを教えてください。

A 回答 (1件)

>Formに伝えてあげたいのです


この言葉がなにを意味しているのかはよくわかりませんが。

もし、Formオブジェクト上で定義したメソッドを
呼ぶようにしたいという話なら簡単です。

Formのクラスの中に、
PictureBox1という名前のPictureBox型のメンバー変数があったとします。
Formのクラスの中に、
PictureBox1_Click()というメソッドがあったとします。
初期処理のどこかで、
PictureBox1.OnClick +=
new ○○EventHandler(PictureBox1_Click);
の記述があれば、
PictureBox1からClickイベントが発生した時、
つまり、画面上でクリックされたときに、
Formクラスにある
PictureBox1_Click()メソッドが呼ばれます。
PictureBox1_Click()メソッドはFormクラスの
メソッドなので、その定義の中でのthisは
フォームオブジェクトそのものです。
そうやってフォームオブジェクトにアクセスできます。

なお、この

PictureBox1.OnClick +=
new ○○EventHandler(PictureBox1_Click);

のコードはVisual Studioのデザイナで
PictureBox1のイベントハンドラを登録すると、
InitialComponent()などというメソッドに
(名前ははっきり覚えてません)勝手に追加されます。
本当は別にどこでもよいです。
初期化処理のところで自分で手で追加しても同じことです。


ご質問ないようは、これでよろしかったでしょうか?

ちなみに、
pictureBox.Parent.OnMouseDown()
ですが、
pictureBox.Parentは
コントロールや、コンテナ型のようなものが
返却されるかと、そのオブジェクトは
OnMouseDownというメソッドは保有していないでしょう。
pictureBox.Parentが貴方が定義した
Formクラスの派生クラスということは、
PictureBoxにはわからないことです。


ご質問内容がいまいちよくわからないので、
想像で勝手に回答しましたが、
勘違いしているようであれば、すいません。

以上です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
私が誤解してわけがわからない質問をしている部分がありましたが、欲しかった情報は+=でイベントが登録できることでした。
どうもありがとうございます。

お礼日時:2006/02/16 19:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています