2008-11-04 26 views
16

Quiero utilizar la misma funcionalidad disponible cuando un Panel.AutoScroll es verdadero, pero con las barras de desplazamiento invisibles.Cómo desplazar un panel manualmente?

Para hacerlo, necesito saber cómo puedo desplazarme hacia la izquierda/derecha arriba/abajo usando las funciones de mi código.

Respuesta

13

Usted debe ser capaz de utilizar las propiedades VerticalScroll y HorizontalScroll del componente:

c.HorizontalScroll.Value += 100; 
c.VerticalScroll.Value = c.VerticalScroll.Maximum; 
+0

Funciona solo cuando AutoScroll = true, pero luego no puedo ocultar HorizontalScroll/VerticalScroll. Configurar Scroll.Visible = false no oculta el desplazamiento) – Jonas

+0

Nota para cualquiera que quiera ocultar la barra de desplazamiento como OP: no lo intente. –

+4

Debido a un error extraño que descubrí, sería mejor usar 'var v = ScrollingPanel.VerticalScroll; v.Value = v.Value = Math.Min (v.Maximum, v.Value + v.LargeChange); 'o las barras de desplazamiento en realidad no se moverán cuando lo haga el panel. Por alguna razón, el valor cambia justo antes de que dibuje la barra de desplazamiento, pero al establecerlo por segunda vez se actualizará. – Patrick

-3

Hay probablemente una propiedad en el panel para hacer esto, también, puede recorrer todos los paneles de los niños y ajustar sus posiciones .

Por ejemplo. para mover todos los controles 10 px:

int xoffset = 10; 

foreach(Control c in panel1.Controls) 
    c.Location.X += xoffset; 

Los controles se pueden mover a posiciones negativas para que se muevan fuera del panel, del mismo modo que puedan tener lugar los valores más grandes que el tamaño de los paneles para que se muevan fuera del panel .

+0

no creo que pueda establecer la ubicación a valores -ve. – pmcilreavy

+0

fallenidol: ¡Eso es simplemente incorrecto! Pruébelo usted mismo, si establece la propiedad .Left de un control para decir -10 se moverá a la izquierda del borde del contenedor. –

+0

Veo que todavía me descuentan esta respuesta. Si alguien lo hace, por favor agregue un comentario sobre por qué, ya que soy bastante curioso :) –

10

Bueno, si no quiere usar la propiedad Autoscroll, hay una forma que utilicé hace mucho tiempo.

  • Coloque un panel dentro del panel. Coloque el control de la barra de desplazamiento en el panel principal y luego use la barra de desplazamiento para cambiar la propiedad Superior del panel dentro.

Es simple y funciona muy bien.

+0

Esto funciona mejor que cualquier otro método que he visto, sin código para escribir. – MrWuf

+0

¿Por qué usar un control de barra de desplazamiento? Simplemente configure el Panel principal para desplazamiento automático. – Traubenfuchs

+0

Tenga en cuenta que la sugerencia excelente de Cyril requiere que la altura del panel secundario sea lo suficientemente grande como para ver todos los controles secundarios (si el padre fuera lo suficientemente grande como para mostrar todo el panel). – AlainD

Cuestiones relacionadas