DOBON.NET DOBON.NETプログラミング掲示板過去ログ

カーソル位置にあるコントロールの取得

環境/言語:[Win7 C# .net3.5]
分類:[.NET]

お世話になります。
フォーム上にグループボックスが多重に重ねて配置しているようなレイアウトがあり、その他ボタン等も多数配置しています。マウスカーソルがある位置にあるコントロールを取得したいのですが、どのような手段がありますでしょうか。
それぞれのコントロール座標内にマウスカーソルの座標がふくまれているかを検索していく方法だと、重ねられたグループボックスの場合などで座標が重複するので、正しく検索できないケースがでてきます。簡単に取得する手段はありますでしょうか。
以上、よろしくお願いします。
WindowFromPoint という API と、Control.FromHandle という .NET のメソッドを併用する方法かなぁ。

[DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point point);

private void timer1_Tick(object sender, EventArgs e)
{
    IntPtr handle = WindowFromPoint(Control.MousePosition);
    if (handle != IntPtr.Zero)
    {
        Control control = Control.FromHandle(handle);
        if (control != null)
        {
            Text = "Found: " + control.Text;
            return;
        }
    }
    Text = "Not found";
}
Control.GetChildAtPointを使ってフォームから再帰的に検索すれば良いんじゃないでしょうか。
2013/10/08(Tue) 18:11:13 編集(投稿者)

Azulean 様、Hongliang 様
お世話になります。

Azulean様のコードにて希望通りの実装ができました。
どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板