ギリギリ行けるお一人様のライン

フォーム内の複数のコンテナ上にあるコントロールの絶対位置(フォーム左端からの位置)を簡単な方法で取得できないでしょうか(VB.NET)。
すべての親コンテナの相対位置を積算すればわかると思うのですが、もっと簡単な方法で取得できないでしょうか。

A 回答 (2件)

★API レベルで計算すれば出来るとアドバイスしたのです。


・プロパティとかで
 親のメイン・ウインドウのハンドルをα、
 子のコントロール・ウインドウのハンドルをβとします。
 そしたら Win32 API の GetWindowRect() 関数を直接呼び出します。
 RECT rc1 ←αの位置変数
 RECT rc2 ←βの位置変数
 
 GetWindowRect( α, rc1 )
 GetWindowRect( β, rc2 )
 
 絶対位置(x)…(rc2.left - rc1.left)
 絶対位置(y)…(rc2.top - rc1.top)
 で計算できます。
・RECT 構造体は長方形領域を格納するものです。下の『参考URL』をどうぞ。
 これでフォームからの絶対位置が求められます。
 なお、私は C/C++ 言語が主要言語ですので、上記の構造体の変数定義はあれで
 あっていますか?注意して手直しなどを行って下さい。
・以上。API 関数を使えば簡単に計算できますよ。

参考URL:http://www.activebasic.com/help_center/Pages/API …
    • good
    • 0
この回答へのお礼

お手数をかけ、申し訳ありません。
ご教示いただいた通り試行してみた結果、うまくいきました。
ありがとうございました。

お礼日時:2007/05/04 18:52

★ヒント


 (1)親のメイン・ウインドウの位置を取得…α
 (2)子のコントロール・ウインドウの位置を取得…β
 (3)横方向なら left 位置を β-α でコントロールの相対位置が計算できる。
 (4)縦方向なら top 位置を β-α でコントロールの相対位置が計算できる。
 以上。参考に!
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
LeftやLocation.Xプロパティではコンテナ内の位置しか取得できませんので、やはり関連する複数の親コンテナのLeftを累計するしかないようですね。

お礼日時:2007/05/04 10:37

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

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


おすすめ情報