2011-12-24 12 views
9

sto utilizzando VS2010, Windows 7C# scorrimento di un pannello in Windows Form

Ho un pannello con un sacco di cornici-per-scatole. Dispone di

AutoScroll = true 

Le barre di scorrimento funzionano correttamente quando si trascina o si fa clic su di esso. Tuttavia, voglio farlo scorrere con la rotellina e i tasti freccia.

Le ruote non rispondono affatto (e l'aggiunta di gestori di eventi al modulo non funziona, in quanto cessa di sparare quando cambio fuoco) e per usare i tasti freccia dovrei scorrere in modo programmatico. Ho provato il seguente:

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

Questo non funziona, la barra di scorrimento si muove a mala pena a tutti. Il massimo è sempre 100 per qualche motivo.

Cosa ho provato sul problema ruota (non funziona):

// 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(); 
} 

Grazie.

+0

È necessario impostare l'attivo al controllo prima che possa scorrere con la rotellina del mouse. Prova a fare clic su di esso prima. –

+0

Non funziona. Ho fatto clic sul pannello, sono le caselle immagine e persino le caselle di testo. La ruota non ha funzionato. –

+0

Utilizzare un TablelayoutPanel? –

risposta

9

Un paio di cose da provare:

Fai la tua Panel hanno la prima TabIndex proprietà. Cioè:

panel1.TabIndex = 0; 

Ovviamente, gli altri controlli della maschera dovrebbero essere reindicizzate correttamente.

Inoltre, prova ad aggiungere lo stato attivo nella MouseDown:

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

Si potrebbe fare MouseEnter, troppo, ma che potrebbe essere un'interfaccia utente strano dato spostando il mouse sopra il pannello ruberebbe attenzione dalla controllo attivo corrente.

Non è necessario abbonarsi all'evento MouseWheel. Dovrebbe spostare automaticamente la barra di scorrimento.

3

Si scorre un pannello assegnando la proprietà AutoScrollPosition. Attenzione che usa valori negativi.

Il motivo per cui la rotellina del mouse non funziona è perché né il pannello né le caselle di immagine sono controlli attivabili. Avrai bisogno di rielaborare il controllo del pannello un po 'per renderlo un focusable. Troverete il codice in this answer.

0

Prova

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