2011-04-06 11 views

Respuesta

24

intentar llamar a .PerformLayout();

+2

Trabajos. Muchas gracias. – EricSchaefer

+0

Sí, puedo confirmar, esto funciona sin problemas para mí en 3 controles diferentes. Gracias. – Rob

+0

Gran solución. –

6

Gracias por la punta .PerformLayout()!

No fue suficiente en mi caso, estoy configurando el VerticalScroll.Value dentro del controlador de eventos Form.Shown, y por alguna razón tuve que agregar una instrucción DoEvents de antemano para que el desplazamiento funcionara.

Aquí es mi manejador de eventos Shown:

Private Sub MyForm_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown 
    System.Windows.Forms.Application.DoEvents() 

    ScrollPanel.VerticalScroll.Value = ScrollPanel.VerticalScroll.Maximum 
    ScrollPanel.PerformLayout() 
End Sub 

de control ScrollPanel es de tipo System.Windows.Forms.Panel.

Sin la línea Application.DoEvents(), la configuración del valor del desplazamiento vertical se ignoró por completo.

Pensé que podría ser útil para otra persona.

0

Tuve exactamente el mismo problema al intentar desplazar automáticamente un panel que contiene un cuadro de imagen.

Encontré otro método para hacerlo funcionar. Incrementar el valor de desplazamiento en dos ocasiones:

ScrollPanel.VerticalScroll.Value += AmountToScroll 

ScrollPanel.VerticalScroll.Value += AmountToScroll 

incrementar el valor de la primera vez hace que el cuadro de imagen para desplazarse dentro del panel, pero el .Value no cambia y el pulgar no se mueve.

Al aumentar el valor por segunda vez, se incrementa el desplazamiento VerticalScroll.Value, moviendo el pulgar, pero el cuadro de imagen no se desplaza nuevamente.

Parece un error para mí. Seguramente tanto el desplazamiento del cuadro de imagen como el incremento del valor .Valor y el movimiento del pulgar deberían ocurrir después de la primera línea de código.

0

Me encontré con algo casi idéntico donde tengo un PictureBox (que muestra un gráfico) dentro de un panel con barras de desplazamiento, y quiero acercar o alejar manteniendo la posición del puntero del mouse "aparentemente" estacionaria. Reubicando el PictureBox dentro del panel para hacer esto, se cancela la sincronización con las barras de desplazamiento, y luego, al desplazarse con las barras de desplazamiento, no se mostrará el área completa del PictureBox. La solución es lograr el movimiento asignando un valor calculado al panel. Propiedades horizontalmente Desplazamiento.Valor y/panel.VerticalScroll.Value. Pero eso solo no es suficiente: una de estas dos soluciones se requiere para hacer que la aplicación se comporte como fue diseñado:

  1. solución de Kman arriba:

    panel.HorizontalScroll.Value = computed_value 
    panel.PerformLayout() 
    
  2. o solución de JJMcLellan arriba: en mi caso , asignando el valor calculado dos veces, por ejemplo:

    panel.HorizontalScroll.Value = computed_value 
    panel.HorizontalScroll.Value = computed_value 
    

Cualquiera de estos parece tener los mismos resultados finales. Dado que el n. ° 2 anterior hace que parezca un error, y el n. ° 1 parece (con suerte) estar por diseño de Microsoft (?), Terminé utilizando el n. ° 1 en mi aplicación. Solo quería confirmar que ambos funcionan en un entorno VB.NET.

Cuestiones relacionadas