Devo trovare il controllo sotto il mouse, all'interno di un evento di un altro controllo. Potrei iniziare con GetTopLevel
e scorrere verso il basso usando GetChildAtPoint
, ma c'è un modo più veloce?C'è un modo rapido per ottenere il controllo che è sotto il mouse?
risposta
Questo codice non ha molto senso, ma non evita l'attraversamento delle collezioni Controlli:
[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;
}
ha perfettamente senso per me. :-) WindowFromPoint afferra la maniglia della finestra direttamente sotto la posizione dei mouse sullo schermo, indipendentemente dal contenimento. Control.FromHandle lo traduce in un controllo .Net (se possibile). Boom, fatto. Molto lucido –
Non sarebbe più semplice simulare il clic del mouse? Puoi trovare un link [qui] (http://stackoverflow.com/questions/2416748/how-to-simulate-mouse-click-in-c) – Pimenta
Cosa succede se voglio ottenere il controllo di un'altra applicazione e –
testato e la parte superiore della mia testa (e forse lento ...):
Control GetControlUnderMouse() {
foreach (Control c in this.Controls) {
if (c.Bounds.Contains(this.PointToClient(MousePosition))) {
return c;
}
}
}
o da fantasia con LINQ:
return Controls.Where(c => c.Bounds.Contains(PointToClient(MousePosition))).FirstOrDefault();
Non sono sicuro di quanto è affidabile questo sarebbe, però.
L'ho appena usato, è bello avere * ogni * controllo sotto la posizione del mouse. Tuttavia, dovrebbe essere c.Bounds.Contains (Punto p) non c.Bounds.IntersectsWith (Rectangle r). – snicker
D'oh! Grazie. Mi limiterò a modificarlo ora ... –
questo non funziona con me .. ottengo sempre il controllo superiore – SolidSnake
- 1. Ottieni valori finestra sotto il mouse
- 2. Qual è un modo consigliato per inserire le viste CouchDB sotto il controllo del codice sorgente?
- 3. Modernizr solo per un rapido controllo?
- 4. Qual è il modo più rapido per ottenere un codice di stato degli URL utilizzando HttpClient
- 5. In ASP.NET, qual è il modo più rapido per ottenere l'URl di base per una richiesta?
- 6. Rotellina del mouse che invia il messaggio al controllo errato
- 7. È possibile sostituire Loader di un SO? Un modo per ottenere il controllo su Loader?
- 8. Modo rapido per trovare il prossimo multiplo di un numero
- 9. Consenti il controllo del mouse della scena three.js solo quando il mouse è su tela
- 10. Qual è il modo migliore per ottenere il conteggio/lunghezza/dimensione di un iteratore?
- 11. il modo più rapido per recuperare dinamicamente le dimensioni dell'immagine
- 12. Che cosa è un calco sotto il cofano
- 13. Strano problema: il clic del mouse nel popup viene catturato dal controllo sotto
- 14. Qual è il modo più rapido per trovare un file in Zend Studio per Eclipse?
- 15. C# che muove il mouse in modo realistico
- 16. Qual è il modo più rapido per moltiplicare più celle per un altro numero?
- 17. Qual è il modo giusto per ottenere un grapheme?
- 18. Qual è il modo * Angolare * per ottenere un elemento fratelli?
- 19. Utilizzo di WPF Sto cercando un modo per rendere ridimensionabile un controllo Thumb usando il mouse per trascinare un bordo
- 20. C'è un/modo più rapido migliore per ottenere metodi che hanno attributo applicato in C#
- 21. jQuery: Evidenzia elemento sotto il cursore del mouse?
- 22. Spostare un controllo trascinandolo con il mouse in C#
- 23. Come posso ottenere la parola sotto il cursore del mouse in Powerpoint 2013 usando C#?
- 24. In che modo Perl confronta le stringhe sotto il cofano?
- 25. Modo rapido e semplice per rimuovere il codice "morto" (commentato)
- 26. In che modo java implementa il modello del peso mosca per la stringa sotto il cofano?
- 27. Il modo più rapido per deduplicare l'elenco in dict
- 28. Mouse multipli Eventi in un controllo
- 29. Qual è il modo più rapido per un programmatore Ruby di prendere Python?
- 30. Qual è il modo più rapido per cancellare un blocco di memoria (o una superficie SDL)?
Perché è necessario iniziare a GetTopLevel, non poteva semplicemente andare a GetChildAtPoint direttamente? –
(a) Il controllo sotto il mouse non è necessariamente figlio del controllo il cui evento è attivo, e (b) dovrei ancora scorrere iterare per trovare il controllo più interno. – Simon