Domanda

Ho un WinForm con 3 caselle di gruppo, uno con le caselle combinate, e due con pulsanti di opzione. Ho impostato tutti loro e dei loro figli controlli per "TabStop = false", ma quando ho ciclo con TAB, il pulsante di opzione attualmente selezionata in ciascuno degli ultimi due caselle di gruppo viene messo a fuoco.

Se non c'è alcun modo per modificare questo comportamento, quello che sarebbe un buon evento per cattura e spostare l'attenzione lontano? Non riesco a trovare un evento "OnFocus".


La soluzione è quella di impostare un metodo (codice qui sotto) per gestire la "Enter" evento di ogni pulsante di scelta nella forma (se è quello che si desidera).

In realtà, ho fatto solo per i pulsanti di scelta del primo casella di gruppo e ha funzionato, i pulsanti di opzione del secondo casella di gruppo non ottengono attenzione, anche se i loro eventi "Enter" non vengono gestiti. Questo non è il comportamento che si sarebbe aspettato.

private void radiobuttonXGroup1_Enter(object sender, EventArgs e)
{
   SomeOtherControl.Focus();
}

Nel file * .Designer.cs si modifica ogni Inserisci evento (per ogni pulsante di scelta) per punto a un gestore di eventi (il metodo di cui sopra).

this.radiobutton1Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
this.radiobutton2Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
this.radiobutton3Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
È stato utile?

Soluzione

La documentazione MSDN per RadioButton.TabStop afferma "Questa API supporta l'infrastruttura .NET Framework e non è destinato ad essere utilizzato direttamente dal codice". Che in pratica significa, "Questo non è andare a lavorare come ci si aspetta in".

Detto questo, l'evento Invio si attiverà quando il pulsante viene attivato. Si può provare a usare quello per spostare lo stato attivo su un altro controllo.

Altri suggerimenti

Impostazione della TabStop su False su un RadioButton per evitare tabulazione alle opere di controllo finché non si actully seleziona il pulsante radio senza alcun override aggiuntivi come suggerito dal @msergeant.

Modifica

Il seguente codice impedisce il codice di ottenere un evento chiave scheda:

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
   radioButton1.TabStop = false;
}

I pulsanti radio si comportano in modo diverso rispetto alla linguetta da altri controlli che lavorano in serie o gruppi in base modificando l'indice scheda o ponendo quindi pulsanti in una casella di gruppo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top