- - PR -
[VB.NET]コンポーネントから親FORMのHandle取得
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-05-26 10:12
「APIを使って何とか取れるのでは」と調査してました。
GetCurrentThreadId? SetWindowsHookEx? EnumThreadWindows?・・・\(T-T)/ で、
とやったらそれなりにハンドルが取れました。 取れたんですが、メソッド名からも分かるようにActiveなFormのHandleなので フォームが画面に表示されていないと駄目そうです。 Controlを継承して作った方が良いのかなと大分弱気です。 | ||||
|
投稿日時: 2005-05-26 11:04
ユーザインターフェースを必要としていないから、
コンポーネントになっているんだと思ったんだけど、、、 コンポーネントって必要なものを必要な時セットする イメージ・先入観があったものですので。
そういうものなんですね。 publicなフィールドってほとんど使ったことがないので(readonlyくらい?)、 なんとなく、プロパティやメソッドにしてしまいます。 | ||||
|
投稿日時: 2005-05-26 12:53
Windows.Forms アプリだと、components.Add() した時に Site が設定されるんじゃなかったでしたっけ? # Control とごっちゃになってるかも>じぶん _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2005-05-26 15:16
「Add() すれば」設定されますが、Form にドロップしただけだと そのコードが生成されないんですよ。 | ||||
|
投稿日時: 2005-05-26 16:04
コンポーネントのコンストラクタ内で実行する雰囲気ですね。
>components.Add() this.timer = new System.Windows.Forms.Timer(this.components); のようなコードが生成されますので。 timer.SiteはNULLではありませんでしたが、 ここから親Form(ハンドル)取得って可能なんですか? | ||||
|
投稿日時: 2005-05-26 16:37
コンポーネントによってはこういったコードが生成されるようですね。
DataSet は、 this.dataSet = new DataSet(); です… で、System.Windows.Forms.Timer の場合でも、this.components は this.components = new System.ComponentModel.Container(); で生成されていて、特に逆側の参照はなさそうですね。 | ||||
|
投稿日時: 2005-05-26 17:02
ほんとだ! なるほど、シリアル化できないからかなぁ、、、> Container ↑根拠なし。 | ||||
|
投稿日時: 2005-05-26 18:54
「Site が何であるか」で結果は変わりますね。 Site として(実は)Form のインスタンスが設定されているなら、Site を Form にキャストすれば、Form.Handle で取れる「かな」レベルの話です。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
