17
A
回答
25
的公共變量按鈕 定義上,鼠標懸停事件看一看GetChildAtPoint
。如果控件包含在容器中,則必須執行一些額外的工作,請參見Control.PointToClient
。
1
1
你可以做多種方式:
聽
MouseEnter
活動窗體的控件。 「發件人」參數會告訴你什麼控制引發了事件。使用
System.Windows.Forms.Cursor.Location
獲取光標位置,並使用Form.PointToClient()
將其映射到表單的座標。然後您可以將該點傳遞給Form.GetChildAtPoint()
以找到該點下的控件。
安德魯
2
// This getYoungestChildUnderMouse(Control) method will recursively navigate a
// control tree and return the deepest non-container control found under the cursor.
// It will return null if there is no control under the mouse (the mouse is off the
// form, or in an empty area of the form).
// For example, this statement would output the name of the control under the mouse
// pointer (assuming it is in some method of Windows.Form class):
//
// Console.Writeline(ControlNavigatorHelper.getYoungestChildUnderMouseControl(this).Name);
public class ControlNavigationHelper
{
public static Control getYoungestChildUnderMouse(Control topControl)
{
return ControlNavigationHelper.getYoungestChildAtDesktopPoint(topControl, System.Windows.Forms.Cursor.Position);
}
private static Control getYoungestChildAtDesktopPoint(Control topControl, System.Drawing.Point desktopPoint)
{
Control foundControl = topControl.GetChildAtPoint(topControl.PointToClient(desktopPoint));
if ((foundControl != null) && (foundControl.HasChildren))
return getYoungestChildAtDesktopPoint(foundControl, desktopPoint);
else
return foundControl;
}
}
13
也許GetChildAtPoint
和PointToClient
是大多數人的第一個想法。我也先用它。但是,GetChildAtPoint
無法正常使用不可見或重疊控件。這是我工作良好的代碼,它管理這些情況。
using System.Drawing;
using System.Windows.Forms;
public static Control FindControlAtPoint(Control container, Point pos)
{
Control child;
foreach (Control c in container.Controls)
{
if (c.Visible && c.Bounds.Contains(pos))
{
child = FindControlAtPoint(c, new Point(pos.X - c.Left, pos.Y - c.Top));
if (child == null) return c;
else return child;
}
}
return null;
}
public static Control FindControlAtCursor(Form form)
{
Point pos = Cursor.Position;
if (form.Bounds.Contains(pos))
return FindControlAtPoint(form, form.PointToClient(pos));
return null;
}
這會給你在光標下的控制權。
相關問題
- 1. C#/ Kinect控制鼠標光標
- 2. 如何獲取onMouseDown事件中鼠標光標下的控件?
- 3. 如何在鼠標光標周圍繪製高光
- 4. 如何通過傳感器控制鼠標光標?
- 5. 如何使用python控制鼠標/光標/指針速度?
- 6. 在鼠標光標下獲取字
- 7. 如何作用於鼠標在OS下的標籤控制X
- 8. 如何更改鼠標光標圖標?
- 9. 接收鼠標移動即使光標在控制之外
- 10. 如何在鼠標左鍵關閉時更改鼠標光標?
- 11. 如何讓鼠標光標在鼠標上抓取?
- 12. 如何在java中的鼠標光標周圍繪製矩形?
- 13. 如何在pygame中按照鼠標光標製作圖像
- 14. 如何在抓取的截圖上繪製鼠標光標?
- 15. 如何在C#-WPF中關閉鼠標時檢測鼠標光標下的自定義控件?
- 16. 限制鼠標光標到行
- 17. CSS鼠標光標...旋轉光標?
- 18. 如何讓鼠標光標不可見?
- 19. 如何獲得鼠標光標類型?
- 20. 如何隱藏鼠標光標?
- 21. 如何用jquery隱藏鼠標光標
- 22. 如何找到鼠標光標索引
- 23. 如何用自定義圖像光標覆蓋鼠標光標?
- 24. 我可以從R內控制鼠標光標嗎?
- 25. 如何確定鼠標光標是否位於控件中
- 26. 在linux中控制鼠標
- 27. 如何擺脫全屏獨佔模式下的鼠標光標?
- 28. 按下某個鍵時如何移動鼠標光標?
- 29. 如何放大到鼠標光標下的點(處理)
- 30. SWT表:如何退出鼠標光標下的行號?
就是這樣!謝謝! – Poma
對於Control.PointToClient +1 –