2008年1月29日火曜日

Control.GetChildAtPointメソッド

マウスの座標から、その下にあるコントロールを取得するメソッドなんだけど・・・。
これ、対象となるコントロールのVisibleがTrueじゃないと動かないっぽい。
今回の作業中に直接フォーカス移動させるときにぶつかったんだけど、とりあえず自前で同じような動きするメソッドを用意してみた。

PublicFunction GetChildControl(ByVal pt As System.Drawing.Point) As System.Windows.Forms.Control  
  For Each child As System.Windows.Forms.Control In Me.Controls  
    Dim childRectAs System.Drawing.Rectangle = New System.Drawing.Rectangle(child.Left, child.Top, child.Width, child.Height)  
    If childRect.Contains(pt.X, pt.Y)Then Return child  
  Next  
  Return Nothing  
EndFunction

マウスの座標って、フォームとかのイベントで取得しているのはクライアント座標なので処理的にはたいしたことなかったかな。
まぁこれがスクリーン座標だったとしても、親Formで一度変換かましてあげればいいだけなんだけどね。
とりあえずの動きとしてはこれでいいので、後は除外されるコントロールを指定できるようにしておかないと・・・。

0 件のコメント:

コメントを投稿