Ho un modulo con i controlli di tabulazione nidificati. Stiamo provando a rendere l'applicazione adattabile alla tastiera, quindi quando accedi al controllo struttura a schede interno, vorremmo che Control-Tab passasse in rassegna le schede interne. Per la maggior parte questo funziona. Partendo qui con la messa a fuoco in TextBox A ....Windows Forms, Nested TabControls con la scheda Groupbox order mystery (w/Illustrations)
Scheda Controllo ci porterà alla scheda successiva come previsto, con la messa a fuoco in TextBox B:
Fantastic , proprio quello che volevamo. Se "Gamma" e "Delta" sono simili, torno indietro di nuovo su Alpha con Control-Tab.
Tuttavia, abbiamo alcune schede in cui tutti i controlli si trovano all'interno delle caselle di gruppo. Questo causa tutti i tipi di problemi. Se prendo lo stesso esempio, ma inserisco la casella di testo all'interno di una casella di gruppo. Partendo qui con la messa a fuoco nel TextBox A ancora:
Control-scheda ci porta alla scheda successiva, come ci si aspetterebbe. (Curiosamente, la messa a fuoco non è da nessuna parte visibile ...)
Ma poi Control-scheda ci porta di nuovo per ...
Speculazione: Questo perché la la tabulazione da Alfa (con le groupbox) a Beta (con le groupbox) lasciava Beta senza controllo con focus. Lo stato attivo tornava al controllo struttura a schede (AlphaBetaGammaDelta) e Control-Tab veniva passato al controllo scheda esterno (OneTwoThreeFour).
Ora, posso risolvere questo catturando l'evento SelectedIndexChanged per il controllo scheda interna, e messa a fuoco manuale il primo controllo della messa a fuoco in grado all'interno di quella scheda ogni volta che cambia, ma che sembra così sbagliato e un mal di testa di manutenzione, se i controlli vengono spostati.
// Works, but I'm not crazy about it.
private void tabControlABGD_SelectedIndexChanged(object sender, EventArgs e)
{
switch(tabControlABGD.SelectedTab.Name)
{
case "tp_A":
tb_a.Focus();
break;
case "tp_B":
tb_b.Focus();
break;
case "tp_G":
tb_g.Focus();
break;
case "tp_D":
tb_d.Focus();
break;
}
}
Messing con "ordine di tabulazione" del modulo - nessun effetto di sorta.
Qual è il modo giusto per risolvere il problema?
I <3 Balsamiq troppo :) – ne1410s
Solo l'istruzione switch è sbagliato: basta selezionare il primo controllo indicizzato nel contenitore focalizzato. –