- - PR -
カスタムコントロールの親フォームの状態は
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-17 22:08
お世話になります。
WinFormで使用されるカスタムコントロールを作成してますが そのコードの中から自分の親フォームがアクティブな状態かどうかをほぼ リアルタイムで調べることが可能でしょうか? 親フォームのアクティブ状態に変化があったと同時に コントロールがそれを探知可能かという意味です。 どなたか、お助けください よろしくお願いします。 | ||||
|
投稿日時: 2003-10-19 17:29
System.Windows.Forms.ControlクラスにParentプロパティがありますが、これにFormが入っていませんか?もちろん、使うためにはキャストしてください。 リアルタイムというのがよくわかりませんが、参照した時点のプロパティが参照できる(できないとおかしい)と思います。 | ||||
|
投稿日時: 2003-10-19 20:59
こんにちは。
返事ありがとうございます。 親フォームのHandleを使ってAPIで調べるということを 言われてるんでしょうか? どんな方法でもいいですが、タイミングが重要なのです。 たとえばフォームがアクティブ状態からディアクティブ状態に なった瞬間にコントロール内のコードを呼び出してほしいのです。 (この仕組みをコントロール内でやりたい) 単にフォームのそのときの状態を調べられたら良い、 というわけではありません。 コントロールのコードをうまく親フォームのイベントに登録できれば 良いような気がしますが、それは可能かどうかもわかりません。 テストしてみましたが、うまくやれてないからかそもそも無理なのかで 動きませんでした。 | ||||
|
投稿日時: 2003-10-20 07:09
親フォームのイベントで、Forms.Controlsをぐるぐる調べ、目的のコントロールであれば所定のメソッドを実行する、というのは? 例えば、そのためのインタフェースを作成し、そのインタフェースにキャストできるか調べ、キャストできればメソッドを実行する、という方法もあります。 > System.Windows.Forms.ControlクラスにParentプロパティがありますが、 >これにFormが入っていませんか? すべてのコントロールは、このクラスを継承しています。したがって、フォーム上に配置するクラスはすべてParentプロパティを持っています。あるメソッドでコントロールのParentプロパティを調べると、それはそのコントロールが入っているコンテナクラスが取得できます。コンテナクラスとは、中にコントロールを格納できる、PanelとかGroupBoxとかです。Formも当然コンテナクラスなので、ParentがNULL(VB.NETではNothing)になるまでさかのぼれば、それがフォームです。 アクティブ、ディアクティブのイベントでということなら、イベントハンドラを登録すればいいのでは? [ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-20 07:08 ] | ||||
|
投稿日時: 2003-10-20 21:32
どうもです。
なるほどですね! 理屈では通ってますね、やってみます。 アドバイスありがとうございます。 またお願いします。 | ||||
|
投稿日時: 2003-10-20 22:14
ご報告です。
なんか、すごい簡単にできましたね。 this.ParentForm.Deactivate += new EventHandler(xxxx); これだけです。 しかし安全ではないですね、ユーザーが簡単にdelegateをアンインストール できてしまいます...なんか対策ありませんかね〜 |
1