Ho un controllo il cui genitore è un ScrollableControl
. Come faccio a trovare la parte del controllo che è effettivamente visibile all'utente? Entrambi sono rettangolari - non ci sono affari divertenti con le regioni.Come si trova la parte visibile di un controllo?
risposta
AutoScrollPosition rappresenta la posizione del rettangolo di visualizzazione del controllo scorrevole. I valori delle coordinate X e Y recuperati sono negativi se il controllo si è allontanato dalla posizione iniziale (0,0). Quando si imposta questa proprietà, è necessario assegnare sempre i valori X e Y positivi per impostare la posizione di scorrimento relativa alla posizione iniziale. Ad esempio, se si dispone di una barra di scorrimento orizzontale e si imposta x e y su 200, si sposta lo scorrimento di 200 pixel a destra; se quindi si imposta xey su 100, la scroll sembra saltare a sinistra di 100 pixel, perché la si sta impostando a 100 pixel di distanza dalla posizione di partenza. Nel primo caso, AutoScrollPosition restituisce {-200, 0}; nel secondo caso, restituisce {-100,0}.
Credo che il metodo GetVisibleRectangle che ho scritto qui di seguito è quello che richiede. corse successive di questo con scrolling ha prodotto il seguente output come il controllo è stato fatto scorrere:
- {X = 0, Y = 0, Larghezza = 0, Height = 0} - button4 è stato fatto scorrere fuori dal campo visivo. Si noti che il valore qui è
Rectangle.Empty
. - {X = 211, Y = 36, Larghezza = 25, Altezza = 13} - il pulsante4 è stato fatto scorrere in modo da rendere visibile l'angolo superiore sinistro
- {X = 161, Y = 36, Larghezza = 75, Altezza = 13 } - Button4 è stato fatto scorrere in modo che la metà superiore e tutta la larghezza era visibile
- {X = 161, Y = 26, larghezza = 75, altezza = 23} - Button4 è stato fatto scorrere per essere interamente visibile
si noti come oltre alle modifiche di Larghezza e Altezza, anche la X, Y è cambiata con lo scorrimento.
Fonte:
private void button1_Click(object sender, EventArgs e)
{
Rectangle r = GetVisibleRectangle(this.panel1, button4);
System.Diagnostics.Trace.WriteLine(r.ToString());
}
public static Rectangle GetVisibleRectangle(ScrollableControl sc, Control child)
{
Rectangle work = child.Bounds;
work.Intersect(sc.ClientRectangle);
return work;
}
Eccellente! Ho solo un suggerimento, usa 'child.Bounds.IntersectsWith (sc.ClientRectangle)' se vuoi solo sapere che il bambino è nella "area di visualizzazione" del controllo. – Cipi
Il seguente link potrebbe aiuta a risolvere questo problema http://www.trace-solution.com/2012/06/how-to-get-visibleviewable-area-of-user.html.
Puoi aggiungere un breve estratto, in modo che la risposta sia ancora utile se il collegamento muore? –
@ S.L.Barth Ironia della sorte, il simile * è * morto. Grande esempio. – Bob
Sarebbe bello se ci fosse un estratto .. :( – AnotherUser
- 1. La "zona visibile" di un controllo?
- 2. Javascript Passa il mouse sopra la parte visibile dell'immagine PNG
- 3. Trova Jquery - Visibile solo
- 4. UILabel parte visibile del testo
- 5. Come si trova la posizione di un controllo/finestra Win32 in relazione alla finestra principale?
- 6. Come si trova la posizione dello schermo di un controllo in silverlight su WP7?
- 7. WinForms DataBind al di controllo visibile Proprietà
- 8. Come nascondere una parte di un controllo WPF
- 9. Come posso sapere se un controllo Delphi è attualmente visibile?
- 10. Dove si trova la casella di controllo Xcode "Trasforma la maschera di ridimensionamento automatico in vincoli"
- 11. Trova la parte di estensione dell'URL salvata in NSString
- 12. Trova controllo in loginview
- 13. Rileva quando la barra di scorrimento di listview WPF si trova nella parte inferiore?
- 14. Trova controllo parent di ToolStripMenuItem
- 15. Rails trova da parte della stringa
- 16. Come determinare se il cursore del mouse si trova all'interno di un controllo
- 17. Trova controllo ListView EmptyDataTemplate
- 18. Come si configura un'immagine nella parte inferiore dello schermo visibile e centrata?
- 19. Applicare hover CSS solo sulla parte visibile di un'immagine ritagliata
- 20. Come rimuovere la riga vuota dalla parte inferiore di un controllo DataGridView?
- 21. CRAN trova un avvertimento che R CMD controllo -come-cran non si
- 22. Come forzare il caricamento di una pagina nel controllo Twebbrowser quando questo non è visibile
- 23. Trova controllo WPF per nome
- 24. Il controllo volume di Mediaelement non è visibile su IE8
- 25. Come si spinge un'intestazione accanto a parte di un contenitore?
- 26. Come scoprire dove si trova la directory di Python include?
- 27. Trova controllo all'interno di Listbox.ItemTemplate (WPF C#)
- 28. Android: come rendere la tastiera sempre visibile?
- 29. Come capire quando il controllo è visibile all'utente?
- 30. Come verificare se un punto (o parte) di una linea si trova all'interno o tocca un rettangolo
Perché vuoi sapere? Di solito è meglio spiegare ciò che alla fine stai cercando di realizzare; spesso qualcuno potrebbe avere un'idea che non risponde alla tua domanda specifica ma ti ottiene il risultato che volevi. –