2011-12-24 9 views
9

estoy usando VS2010, Windows 7C# Desplazamiento de un panel en forma de ventanas

que tiene un panel con una gran cantidad de imágenes cajas. Tiene

AutoScroll = true 

Las barras de desplazamiento funcionan correctamente cuando lo arrastro, o haga clic en él. Sin embargo, quiero desplazarlo con la rueda y las teclas de flecha.

Las ruedas no responden en absoluto (y agregar controladores de eventos a la forma no funciona, ya que deja de disparar cuando cambio de foco), y para usar las teclas de flecha tendré que desplazarme programáticamente. Intenté lo siguiente:

panel3.VerticalScroll.Value = panel3.VerticalScroll.Maximum; 

Esto no funciona, la barra de desplazamiento apenas se mueve en absoluto. máxima es siempre el 100 por alguna razón.

lo que he intentado en el problema de la rueda (no funciona):

// Fires as long as i don't change focus to anything 
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel); 

private void Panel1_MouseWheel(object sender, MouseEventArgs e) 
{ 
    panel3.Focus(); 
} 

Gracias.

+0

Hay que establecer el foco en el control antes de que se desplazará con la rueda del ratón. Intente hacer clic primero. –

+0

No funciona. Hice clic en el panel, en cuadros de imagen e incluso en cuadros de texto. Wheel no funcionó. –

+0

¿Usa un TablelayoutPanel? Probamos –

Respuesta

9

Un par de cosas para probar:

Haga su Panel tienen la primera TabIndex propiedad. Es decir:

panel1.TabIndex = 0; 

Obviamente, los otros controles en el formulario deben volver a indexarse ​​correctamente.

Además, trate de añadir el foco en el evento MouseDown:

void panel1_MouseDown(object sender, MouseEventArgs e) { 
    if (!panel1.Focused) 
    panel1.Focus(); 
} 

Usted podría hacer MouseEnter, también, pero eso puede ser una interfaz de usuario extraño, ya que mover el ratón sobre el panel podría robar el foco lejos de la control activo actual.

No debería ser necesario para suscribirse al evento MouseWheel. Debería mover la barra de desplazamiento automáticamente.

3

se desplaza un panel asignando la propiedad AutoScrollPosition. Ten en cuenta que usa valores negativos.

La razón por la rueda del ratón no funciona es porque ni el Grupo Especial ni los cuadros de imagen son controles enfocable. Tendrá que volver a trabajar el control del panel un poco para que sea enfocable. Encontrará el código en this answer.

0

Trate

private void panel1_MouseEnter(object sender, EventArgs e)  
{  
    panel1.Focus();  
} 
Cuestiones relacionadas