Tôi cần tìm điều khiển bên dưới chuột, trong một sự kiện của một điều khiển khác. Tôi có thể bắt đầu với GetTopLevel
và lặp lại bằng cách sử dụng GetChildAtPoint
, nhưng có cách nào nhanh hơn không?Có cách nào nhanh chóng để điều khiển dưới chuột không?
Trả lời
Mã này không làm cho rất nhiều ý nghĩa, nhưng nó tránh đi qua các bộ sưu tập Controls:
[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;
}
Làm cho cảm giác hoàn hảo với tôi. :-) WindowFromPoint grabs xử lý cửa sổ trực tiếp dưới vị trí chuột trên màn hình, bất kể ngăn chặn. Control.FromHandle dịch nó thành một điều khiển .Net (nếu có thể). Boom, xong rồi. Rất trơn. –
Nó sẽ không dễ dàng hơn để mô phỏng cú click chuột? Bạn có thể tìm thấy liên kết [tại đây] (http://stackoverflow.com/questions/2416748/how-to-simulate-mouse-click-in-c) – Pimenta
Nếu tôi muốn kiểm soát ứng dụng khác & –
chưa được kiểm tra và ra khỏi đỉnh đầu của tôi (và có thể chậm ...):
Control GetControlUnderMouse() {
foreach (Control c in this.Controls) {
if (c.Bounds.Contains(this.PointToClient(MousePosition))) {
return c;
}
}
}
Hoặc phải được ưa thích với LINQ:
return Controls.Where(c => c.Bounds.Contains(PointToClient(MousePosition))).FirstOrDefault();
Tôi không chắc chắn như thế nào đáng tin cậy này sẽ là, mặc dù.
Tôi chỉ sử dụng điều này, thật tuyệt vời để có được * mọi điều khiển * dưới một vị trí chuột. Tuy nhiên, nó phải là c.Bounds.Contains (Điểm p) không c.Bounds.IntersectsWith (Rectangle r). – snicker
D'oh! Cảm ơn. Tôi sẽ chỉ chỉnh sửa nó ngay bây giờ ... –
điều này không làm việc với tôi .. Tôi luôn luôn có được kiểm soát hàng đầu – SolidSnake
- 1. Có cách nào nhanh chóng để thay đổi các tabindex trên một biểu mẫu có nhiều điều khiển không?
- 2. Có cách nào nhanh chóng để tạo bộ không?
- 3. Object.isArray() chậm, có cách nào nhanh chóng để làm điều đó không?
- 4. Làm thế nào để tạo ra một điều khiển nhanh chóng Datagrid WPF từ đầu?
- 5. Xcode nhanh chóng chuyển đến Hành động được liên kết với Điều khiển
- 6. Có cách nào nhanh chóng để có được mọi liên kết giữa hai thực thể không?
- 7. Cách nhanh chóng để so sánh inputstreams
- 8. Có cách nào nhanh chóng để khóa thân của kho SVN của tôi không?
- 9. Có cách nào nhanh chóng để giảm thụt lề của nhiều dòng trong Python không?
- 10. Làm cách nào để reindex ElasticSearch nhanh chóng?
- 11. Cách nhanh chóng để lấy nội dung của MemoryStream dưới dạng chuỗi ASCII
- 12. Có cách nào nhanh chóng để kiểm tra xem cột BẤT CỨ là NULL không?
- 13. Có cách nào nhanh chóng để chuyển đổi thực thể thành tệp .csv không?
- 14. Có cách nào nhanh chóng để lấy hai ký tự cuối cùng trong một chuỗi không?
- 15. Có cách nào nhanh chóng để hiển thị mã của một phương thức được khai báo trong Bảng điều khiển Scala không?
- 16. Nhanh chóng truyền trong C# bằng cách sử dụng BitConverter, nó có thể nhanh hơn không?
- 17. Làm cách nào để ngăn chuyển động chuột nhanh chóng phá vỡ một dòng trong ứng dụng vẽ của tôi?
- 18. Làm cách nào một điều khiển có thể xử lý một cú nhấp chuột bên ngoài điều khiển đó?
- 19. Điều gì có nghĩa là Git push không thể nhanh chóng được hợp nhất?
- 20. Java: Có cách nào dễ dàng, nhanh chóng với AND, OR hoặc XOR cùng nhau không?
- 21. Làm thế nào để nhanh chóng stdClass tại chỗ
- 22. Cách nhanh chóng để xác định xem một PID có tồn tại trên (Windows) không?
- 23. Đang tải jQuery một cách nhanh chóng
- 24. Làm thế nào để nhanh chóng thử nghiệm mã Java?
- 25. Cách nhanh chóng/dễ dàng để chạy một phương pháp dựa trên điều kiện
- 26. Có cách nào nhanh chóng để tìm nếu (n-1)! chia hết cho n?
- 27. Không thể nhanh chóng lớp: org.apache.naming.java.javaURLContextFactory
- 28. Có cách nào nhanh chóng tìm thấy kết thúc bị thiếu trong Ruby không?
- 29. Có cách nào để lưu vào bộ nhớ cache Chế độ xem để truy vấn nhanh chóng không?
- 30. Có cách nào nhanh chóng để tìm kiếm các biến trong R?
Tại sao bạn cần phải bắt đầu từ GetTopLevel, không thể bạn chỉ cần truy cập GetChildAtPoint trực tiếp? –
(a) Điều khiển dưới con chuột không nhất thiết phải là con của điều khiển có sự kiện đang kích hoạt và (b) tôi vẫn sẽ phải lặp lại để tìm điều khiển bên trong nhất. – Simon