• ベストアンサー

コントロールの絶対位置を取得したい

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.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/GDI/Type/type_RECT.htm
sugao_chib
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

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

sugao_chib
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 絶対位置と相対位置

    娘の親に対する位置を決めたいと思い、娘のほうに相対位置を記述しましたが、思ったとおりになりませんでした。 そこで自分でも調べてみると、どこかに「親のほうを絶対位置にしなさい(座標は不要)」と書いてありました。 理由がわかりません。 相対位置は何かに相対=比較しての位置なので、ひとつ上の親だと納得できるのですが、なぜ親を絶対位置にするのですか。しかも座標は不要って・・・ 絶対位置は「絶対」の内容からして宇宙や地球ではなくとも UA の表示部分の左上かなと思っているのですが、なぜ座標が不要ということより、娘を親に相対させるためにそもそもなぜ親に絶対位置を設定しないといけないのかわかりません。親に対する相対なら、親がどこにいてもよいはずです。 お願いします。

  • フォームの位置を取得したい

    フォームの中に別のフォームを表示させたいのですが,親フォームの位置を取得する方法はありますか。 そうすれば,子フォーム名.Location = New Point(500, 300) とやれるのですが。

  • ダイアログ内コントロールの位置取得について

    いつもお世話になっております。 ダイアログ内に配置されているコントロールの位置の取得方法について ご教授頂きたく質問させていただきました。 私が試したところGetWindowRect( コントロールハンドル, &rc ); とするとありえないぐらい大きな座標が帰ってきます。 上記の方法ではうまくいきません。 ご教授よろしくお願いいたします。

  • AccessVBA全てのコントロールのイベントを取得したいです。

    AccessVBA全てのコントロールのイベントを取得したいです。 フォーム上にコントロールが20個ほどあります。 現在は抽出ボタンを使用し、抽出実行イベントを行っています。 出来れば、すべてのAfterUpdate()で抽出実行させたいのですが、 コードの書き方がわかりません。 全てのコントロールに対しAfterUpdate()のイベントを書くしか方法はないでしょうか? フォーム内どのコントロールでも抽出実行Functionさせたいです。 ExcelVBAの様にシート内の全てのChangeイベントの様な取得方法はないものでしょうか? ご存じの方がおられましたら、アドバイスよろしくお願いいたします。 m(_ _)m

  • img画像の絶対位置 Left Topの求め方

    画像Aをimgタグで表示させた後、その画像のLeft,Topの絶対位置をJavascriptで取得する方法が知りたいです。 大きい画像Aの上に小さい画像Bを配置する予定ですが、AのLeft,Top座標がわかれば、Aの相対位置からBの絶対位置が求められるためです。 また、このような考え方(画像の絶対位置を求めて位置をpxで指定する方法)はWebでは普通でしょうか?

  • C# タブのコントロール取得

    お世話になります。 FOAM上のコントロールを取得する場合は foreach (Control ctr1 in Controls){ } で取れますが、FOAM上のTabControlにADDしてあるコントロールを取得することができませんでした。 タブコントロールまでは取得できますが…。 タブ上に配置してあるオブジェクトを取得するには どのようにしたらよいのでしょうか? お知恵を拝借できればと思います。 よろしくお願いします。

  • VS2008-Proでラベルコントロールの絶対位置にしたい。

    VS2008-Proでラベルコントロールの絶対位置にしたい。 初心者です。Web勉強中です。 <オプション> ダイアログの左側 [HTML デザイナ]-[CSS 配置] が開いてる状態になりますので、右側の配置オプションで [ツールボックス、貼り付け、またはドラッグ・・・] にチェックを入れてますが、ラベルコントロールが自由な名位置(「絶対配置」)になりません。 ボタンやテキストコントロールはできるのですが。 どうすれば、なるのでしょうか。教えていただけませんか?

  • コントロールバーの位置を戻すには?

    フリーズしてしまいリセットボタンを押しました。 その後再起動したところコントロールバーの位置が通常の位置(左下)から画面下3分の1へとずれてしまいました(上下の位置だけずれており、一応左端です)。 非常にうっとうしいです。非表示にすれば問題ないのですが、普段使うので何とかしたいと思っています。 どのようにしたら元の位置に戻すことができるのでしょうか? ノートンにて調べましたが、変化ありません。 iMac DV SE ,Mac OS 9.0.4

    • ベストアンサー
    • Mac
  • フォーム上の現在アクティブなコントロールの取得

    Excel2003についてですが、VBAでフォーム上の現在アクティブな コントロールの名前が取得できないかと思います。 方法はありますでしょうか?

  • ユーザコントロールのイベント取得について(C#)

    環境:Visual Studio 2005 C# Windows Application フォームに自作のユーザコントロールを貼り付けてそのイベントを取得する勉強をしているものです。 フォームでのユーザコントロールイベントを取得して処理をする方法が分かりません。 状況 ユーザコントロールにはテキストボックスを追加しています。 また、フォームにそのユーザコントロールを追加しています。 確認したいことは、ユーザコントロールのテキストボックスになにか値を入力したタイミングでチェンジイベントをフォーム側で察知し、処理をするというものです。 どなたか、要点だけでもいいので教えていただけないでしょうか? 宜しくお願いいたします。