Tengo un control cuyo elemento principal es ScrollableControl
. ¿Cómo encuentro la parte del control que es realmente visible para el usuario? Ambos son rectangulares: no hay negocios graciosos con Regions.¿Cómo encuentro la parte visible de un control?
Respuesta
AutoScrollPosition representa la ubicación del rectángulo de visualización del control desplazable. Los valores de coordenadas X e Y recuperados son negativos si el control se desplazó desde su posición inicial (0,0). Cuando establezca esta propiedad, siempre debe asignar valores X e Y positivos para establecer la posición de desplazamiento relativa a la posición de inicio. Por ejemplo, si tiene una barra de desplazamiento horizontal y establece x e y a 200, mueve el desplazamiento 200 píxeles hacia la derecha; si luego configura x e y a 100, el desplazamiento aparece para saltar 100 píxeles hacia la izquierda, porque lo está configurando a 100 píxeles de distancia de la posición de inicio. En el primer caso, AutoScrollPosition devuelve {-200, 0}; en el segundo caso, devuelve {-100,0}.
Creo que el método GetVisibleRectangle escribí a continuación es lo que estaba solicitando. carreras sucesivas de este con desplazamiento produjo el siguiente resultado como el control se desplaza:
- {X = 0, Y = 0, Anchura = 0, Altura = 0} - button4 se desplaza fuera de la vista. Tenga en cuenta que el valor aquí es
Rectangle.Empty
. - {X = 211, Y = 36, Ancho = 25, Altura = 13} - Se desplazó el botón 4 para que la esquina superior izquierda fuera visible
- {X = 161, Y = 36, Ancho = 75, Altura = 13 } - button4 se desplaza por lo que la mitad superior y la anchura entera fue visible
- {X = 161, y = 26, anchura = 75, Altura = 23} - button4 se desplaza a ser totalmente visible
Nota cómo además de los cambios de Ancho y Altura que la X, Y también cambió con el desplazamiento.
Fuente:
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;
}
¡Excelente! Solo tengo una sugerencia, use 'child.Bounds.IntersectsWith (sc.ClientRectangle)' si solo quiere saber si el niño está en el "área de visualización" del control. – Cipi
El siguiente enlace fuerza ayuda a resolver este problema http://www.trace-solution.com/2012/06/how-to-get-visibleviewable-area-of-user.html.
¿Podría agregar un breve extracto para que la respuesta siga siendo útil si el enlace muere? –
@ S.L.Barth Irónicamente, el estilo * ha * muerto. Buen ejemplo – Bob
Sería bueno si hubiera un extracto .. :( – AnotherUser
- 1. UILabel parte visible del texto
- 2. ancho de pantalla vs parte visible
- 3. ¿Cómo puedo saber si un control Delphi está actualmente visible?
- 4. UIWindow no visible en la parte superior de Storyboard
- 5. ¿Cómo encuentro la mejor revisión coincidente en un sistema de control de versiones?
- 6. Cómo ocultar una parte de un control de WPF
- 7. ¿Diferencia de control entre Ocultar() y Visible?
- 8. cómo desactivar parte del control de uisegment?
- 9. ¿Cómo determino la visibilidad de un control?
- 10. ¿Cómo se configura la propiedad "Visible" de un control ASP.NET desde una función Javascript?
- 11. Cómo obtener las dimensiones de la parte visible de la ventana basada en JScrollPane
- 12. Cómo creo una actividad que esté visible en la parte superior de la pantalla de bloqueo
- 13. ¿Cómo pego una imagen en la parte inferior de la pantalla visible y me centro?
- 14. ¿Cómo elimino la fila vacía de la parte inferior de un control DataGridView?
- 15. Winforms DataBind a la propiedad Visible del control
- 16. ¿Cómo encuentro la instancia a la que pertenece un método?
- 17. ¿Cómo encuentro automáticamente la ubicación de un usuario?
- 18. Cómo mostrar una barra de progreso en la parte superior de un control en WPF
- 19. ¿Cómo encuentro la distancia entre dos puntos?
- 20. Configuración del enfoque en un control dentro de una plantilla de control (Parte 2)
- 21. ¿Cómo encuentro el índice de un elemento en un vector?
- 22. ¿Cómo obtener el valor "real" de la propiedad Visible?
- 23. ¿Dónde encuentro Microsoft.VisualStudio.DebuggerVisualizers?
- 24. ¿Cómo encuentro el directorio actual?
- 25. C# winform check si el control es físicamente visible
- 26. ¿Cómo encuentro el código útil eliminado previamente pero todavía almacenado en el control de código fuente?
- 27. Al utilizar ScrollViewer como parte de plantilla para un cierto control, el botón izquierdo se maneja
- 28. Cargando solo la parte visible de un DOM, y eliminar elementos DOM que no están visibles en la ventana
- 29. ¿Cómo encuentro la fecha y hora de instalación de Windows?
- 30. ¿Cómo encuentro/busca/grep un historial de repositorio SVN?
¿Por qué quieres saber? Por lo general, es mejor explicar lo que finalmente estás tratando de lograr; a menudo, alguien puede tener una idea que no responde a su pregunta específica, pero obtiene el resultado que deseaba. –