- PR -

カスタムコントロールの親フォームの状態は

1
投稿者投稿内容
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2003-10-17 22:08
お世話になります。

WinFormで使用されるカスタムコントロールを作成してますが
そのコードの中から自分の親フォームがアクティブな状態かどうかをほぼ
リアルタイムで調べることが可能でしょうか?
親フォームのアクティブ状態に変化があったと同時に
コントロールがそれを探知可能かという意味です。

どなたか、お助けください
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-19 17:29
引用:

CHNさんの書き込み (2003-10-17 22:08) より:

WinFormで使用されるカスタムコントロールを作成してますが
そのコードの中から自分の親フォームがアクティブな状態かどうかをほぼ
リアルタイムで調べることが可能でしょうか?


 System.Windows.Forms.ControlクラスにParentプロパティがありますが、これにFormが入っていませんか?もちろん、使うためにはキャストしてください。
 リアルタイムというのがよくわかりませんが、参照した時点のプロパティが参照できる(できないとおかしい)と思います。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2003-10-19 20:59
こんにちは。
返事ありがとうございます。

親フォームのHandleを使ってAPIで調べるということを
言われてるんでしょうか?
どんな方法でもいいですが、タイミングが重要なのです。
たとえばフォームがアクティブ状態からディアクティブ状態に
なった瞬間にコントロール内のコードを呼び出してほしいのです。
(この仕組みをコントロール内でやりたい)
単にフォームのそのときの状態を調べられたら良い、
というわけではありません。
コントロールのコードをうまく親フォームのイベントに登録できれば
良いような気がしますが、それは可能かどうかもわかりません。
テストしてみましたが、うまくやれてないからかそもそも無理なのかで
動きませんでした。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-20 07:09
引用:

CHNさんの書き込み (2003-10-19 20:59) より:

親フォームのHandleを使ってAPIで調べるということを
言われてるんでしょうか?
どんな方法でもいいですが、タイミングが重要なのです。
たとえばフォームがアクティブ状態からディアクティブ状態に
なった瞬間にコントロール内のコードを呼び出してほしいのです。
(この仕組みをコントロール内でやりたい)


 親フォームのイベントで、Forms.Controlsをぐるぐる調べ、目的のコントロールであれば所定のメソッドを実行する、というのは?

 例えば、そのためのインタフェースを作成し、そのインタフェースにキャストできるか調べ、キャストできればメソッドを実行する、という方法もあります。


> System.Windows.Forms.ControlクラスにParentプロパティがありますが、
>これにFormが入っていませんか?
 すべてのコントロールは、このクラスを継承しています。したがって、フォーム上に配置するクラスはすべてParentプロパティを持っています。あるメソッドでコントロールのParentプロパティを調べると、それはそのコントロールが入っているコンテナクラスが取得できます。コンテナクラスとは、中にコントロールを格納できる、PanelとかGroupBoxとかです。Formも当然コンテナクラスなので、ParentがNULL(VB.NETではNothing)になるまでさかのぼれば、それがフォームです。

 アクティブ、ディアクティブのイベントでということなら、イベントハンドラを登録すればいいのでは?

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-20 07:08 ]
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2003-10-20 21:32
どうもです。

なるほどですね!
理屈では通ってますね、やってみます。
アドバイスありがとうございます。

またお願いします。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2003-10-20 22:14
ご報告です。
なんか、すごい簡単にできましたね。

this.ParentForm.Deactivate += new EventHandler(xxxx);

これだけです。

しかし安全ではないですね、ユーザーが簡単にdelegateをアンインストール
できてしまいます...なんか対策ありませんかね〜
1

スキルアップ/キャリアアップ(JOB@IT)