- PR -

[VB.NET]コンポーネントから親FORMのHandle取得

投稿者投稿内容
ophiuchus
会議室デビュー日: 2003/08/27
投稿数: 11
投稿日時: 2005-05-26 10:12
「APIを使って何とか取れるのでは」と調査してました。
GetCurrentThreadId?
SetWindowsHookEx?
EnumThreadWindows?・・・\(T-T)/

で、
コード:
Debug.WriteLine(System.Windows.Forms.Form.ActiveForm.Handle)


とやったらそれなりにハンドルが取れました。
取れたんですが、メソッド名からも分かるようにActiveなFormのHandleなので
フォームが画面に表示されていないと駄目そうです。

Controlを継承して作った方が良いのかなと大分弱気です。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2005-05-26 11:04
ユーザインターフェースを必要としていないから、
コンポーネントになっているんだと思ったんだけど、、、
コンポーネントって必要なものを必要な時セットする
イメージ・先入観があったものですので。

引用:

それでいいなら質問しないような。。。
てか、プロパティにしないでも public なフィールドでもいいわけだし。


そういうものなんですね。
publicなフィールドってほとんど使ったことがないので(readonlyくらい?)、
なんとなく、プロパティやメソッドにしてしまいます。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-05-26 12:53
引用:

でも、VS.NET のビジュアルデザイナで Component を貼り付けたときって、
IComponent.Site が設定されていない(メンバ変数にインスタンスを格納するだけ)
な気がするんですが…



Windows.Forms アプリだと、components.Add() した時に Site が設定されるんじゃなかったでしたっけ?

# Control とごっちゃになってるかも>じぶん

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-26 15:16
引用:

Windows.Forms アプリだと、components.Add() した時に Site が設定されるんじゃなかったでしたっけ?


「Add() すれば」設定されますが、Form にドロップしただけだと
そのコードが生成されないんですよ。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2005-05-26 16:04
コンポーネントのコンストラクタ内で実行する雰囲気ですね。
>components.Add()

this.timer = new System.Windows.Forms.Timer(this.components);
のようなコードが生成されますので。

timer.SiteはNULLではありませんでしたが、
ここから親Form(ハンドル)取得って可能なんですか?
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-05-26 16:37
コンポーネントによってはこういったコードが生成されるようですね。
DataSet は、
this.dataSet = new DataSet();
です…

で、System.Windows.Forms.Timer の場合でも、this.components は
this.components = new System.ComponentModel.Container();
で生成されていて、特に逆側の参照はなさそうですね。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2005-05-26 17:02
引用:

にしざきさんの書き込み (2005-05-26 16:37) より:
コンポーネントによってはこういったコードが生成されるようですね。
DataSet は、
this.dataSet = new DataSet();
です…


ほんとだ!
なるほど、シリアル化できないからかなぁ、、、> Container
↑根拠なし。

渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-05-26 18:54
引用:

timer.SiteはNULLではありませんでしたが、
ここから親Form(ハンドル)取得って可能なんですか?



「Site が何であるか」で結果は変わりますね。

Site として(実は)Form のインスタンスが設定されているなら、Site を Form にキャストすれば、Form.Handle で取れる「かな」レベルの話です。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/

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