別のコントロールのイベント内で、マウスの下でコントロールを見つける必要があります。私はGetTopLevel
で始まり、GetChildAtPoint
を使って反復することができますが、より速い方法がありますか?マウスの下にあるコントロールを簡単に取得する方法はありますか?
答えて
このコードは、多くの意味がありませんが、それはコントロールのコレクションを横断避けるん:
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr WindowFromPoint(Point pnt);
private void Form1_MouseMove(object sender, MouseEventArgs e) {
IntPtr hWnd = WindowFromPoint(Control.MousePosition);
if (hWnd != IntPtr.Zero) {
Control ctl = Control.FromHandle(hWnd);
if (ctl != null) label1.Text = ctl.Name;
}
}
private void button1_Click(object sender, EventArgs e) {
// Need to capture to see mouse move messages...
this.Capture = true;
}
私に完璧な意味を作成します。 :-) WindowFromPointは、包含関係にかかわらず、画面上のマウスの位置の直下でウィンドウハンドルを取得します。 Control.FromHandleは、それを.Netコントロールに変換します(可能な場合)。ブーム、完了。非常に滑らか。 –
マウスクリックをシミュレートする方が簡単でしょうか?あなたはリンク[ここ](http://stackoverflow.com/questions/2416748/how-to-simulate-mouse-click-in-c)を見つけることができます – Pimenta
私は別のアプリケーション& –
(そしておそらく遅い...):
Control GetControlUnderMouse() {
foreach (Control c in this.Controls) {
if (c.Bounds.Contains(this.PointToClient(MousePosition))) {
return c;
}
}
}
またはLINQと空想することにする:
return Controls.Where(c => c.Bounds.Contains(PointToClient(MousePosition))).FirstOrDefault();
私はこの方法が信頼性がわかりませんしかし、それはだろう。
私はちょうどこれを使用しました、それはマウスの位置の下に*すべてのコントロールを得ることは素晴らしいことです。ただし、c.Bounds.Conters(Point p)ではなく、c.Bounds.IntersectsWith(Rectangle r)でなければなりません。 – snicker
D'oh!ありがとう。私はちょうど今それを編集します... –
これは私と動作しません..私はいつもトップコントロールを得る – SolidSnake
- 1. ユーザーの国コードを簡単に取得する方法はありますか?
- 2. Google Financeデータを簡単に取得する方法はありますか?
- 3. Javaオブジェクトのサイズを取得する簡単な方法はありますか?
- 4. ActiveMQのキュー長を取得する簡単な方法はありますか?
- 5. コントロールから(つまりDataGridViewの下で)基になるDataTableを取得する方法はありますか?
- 6. WebSphereに簡単にデプロイする方法はありますか?
- 7. 日付を取得する簡単な方法はありますか?
- 8. CObListを簡単にソートする方法はありますか?
- 9. ファイルディスクリプタを簡単にフォークする方法はありますか?
- 10. QProgressBarを簡単にカスタマイズする方法はありますか?
- 11. Readlineに代わる簡単な方法はありますか?
- 12. には、pycurl/curlのhttpリクエストの送信ヘッダを簡単に取得する方法はありますか?
- 13. pandas.Seriesを単調にする簡単な方法はありますか?
- 14. 簡単な方法でデータベースから1つのデータのみを取得する方法はありますか?
- 15. DataTableでListViewを簡単に取り込む方法はありますか?
- 16. Facebookのユーザーから好きなものを簡単に取得する方法はありますか?
- 17. 複数のコミットを簡単にスムーズにする方法はありますか?
- 18. R希望の行とそのネイバーを簡単な方法で取得する方法はありますか?
- 19. パスからXML要素を簡単に取得する方法はありますか?
- 20. Object-c/iPhone-OSでオブジェクトの作成者オブジェクトを簡単に取得する方法はありますか?
- 21. Cでregexの選択肢を簡単に取得する方法はありますか?
- 22. NATO音声アルファベットのベクトルを簡単に取得する方法はありますか?
- 23. NSArrayを後方に反復する簡単な方法はありますか?
- 24. RubyコードをPHPに簡単に変換する方法はありますか?
- 25. WPFの親行に簡単にバインドする方法はありますか?
- 26. ドットネットのWindowsフォームを簡単に印刷する方法はありますか?
- 27. Azure Web AppのAppSettingsを簡単にエクスポートする方法はありますか?
- 28. フラッシュプロジェクトのサイズを簡単に変更する方法はありますか?
- 29. ジンジャーブレッドのソースコードを簡単にコンパイルする方法はありますか?
- 30. アドレスバーの背景を簡単に変更する方法はありますか?
は、なぜあなたは単に直接GetChildAtPointに行くことができなかった、GetTopLevelで起動する必要がありますか? –
(a)マウスの下のコントロールは、必ずしもイベントが発生しているコントロールの子である必要はありません。(b)さらに、最も内側のコントロールを見つけるためには、反復処理を行う必要があります。 – Simon