Truco - AutoScrollPosition

23/12/2005 - 09:27 por Leonardo | Informe spam
Aplicable a controles derivados de ScrollableControl como por ejemplo
UserControl.

La propiedad AutoScrollPosition es de lectura y escritura, pero en la
documentación solo hay ejemplos para su uso como propiedad de lectura.

Si asigno de manera intuitiva a AutoScrollPosition un nuevo valor por
programa para desplazar la vista, obtengo un comportamiento algo extraño.

Analizando en debug veo que AutoScrollPosition devuelve valores negativos,
pero ignora valores negativos cuando le asigno un nuevo valor.

Así pues con el siguiente código consigo el el objetivo deseado:

Public Sub Scroll(ByVal x As Integer, ByVal y As Integer)
Dim xx As Integer = -AutoScrollPosition.X + x
Dim yy As Integer = -AutoScrollPosition.Y + y
'Comentadas por innecesarias, la capa subyaciente ya hace las
comprobaciones necesarias
'If xx < 0 Then xx = 0
'If yy < 0 Then yy = 0
AutoScrollPosition = New Point(xx, yy)
End Sub

Para Keys.Up, Keys.Left utilizo valores negativos de x,y que incrementan el
desplazamiento y viceversa para Keys.Right,Keys.Up.

Nota.: para un correcto funcionamiento es necesario asignar a
AutoScrollMinSize el valor apropiado en función del tamaño virtual a
desplazar.
 

Leer las respuestas

#1 Leonardo
26/12/2005 - 08:33 | Informe spam
Dado que lo expuesto anteriormente puede parecer extraño, he revisado la
documentación de Msdn2 para ver si es congruente:

En Msdn1:
Nota AutoScrollPosition representa la ubicación del rectángulo de
presentación del control desplazable. Los valores de las coordenadas X y Y
recuperadas son negativos si el control se ha desplazado de su posición
inicial (0,0). Sin embargo, al establecer esta propiedad, es necesario
asignar valores de X y Y positivos para alejarse de la posición inicial y
valores negativos para acercarse a ella.

En Msdn2:
http://msdn2.microsoft.com/en-us/li...ition.aspx

The X and Y coordinate values retrieved are negative if the control has
scrolled away from its starting position (0,0). When you set this property,
you must always assign positive X and Y values to set the scroll position
relative to the starting position

Preguntas similares