2009-06-30 22 views
7

Ho creato un modulo con un'etichetta, una casella di testo e un pulsante. Nell'evento di caricamento del modulo ho chiamato la funzione focus() per la casella di testo. Ma quando eseguo il mio codice il cursore non viene nella casella di testo. Ho bisogno del cursore per andare alla casella di testo non appena viene caricato il modulo. Come farlo?focus to text box

risposta

7

Se avete semplicemente bisogno di assicurarsi un certo controllo ottiene concentrarsi prima volta che si carica un modulo, quindi modificare le TabOrder proprietà di tutti i controlli (in Progettazione) in modo che il controllo in questione è '0' e gli altri elementi salgono da lì, '1', '2', ecc.

Se è necessario selezionare dinamicamente un controllo diverso quando si visualizza un modulo in base ad alcune condizioni, utilizzare il seguente codice:

private void Form1_Load(object sender, EventArgs e) { 
    // You need to show the form otherwise setting focus does nothing 
    // (there are no controls to set focus to yet!) 
    this.Show() 
    if (someCondition == true) 
     control.Focus(); 
    else 
     control2.Focus(); 
} 
+0

Focus 'può essere impostato sull'evento Form Show. –

+1

+1: imposta l'ordine di tabulazione corretto dei controlli e lascia che il framework faccia il lavoro. –

+4

Potrebbe volere un ordine di tabulazione specifico ma potrebbe non voler iniziare con la proprietà dell'ordine delle schede 0. –

3

Gestire invece l'evento Shown. Questo codice dovrebbe funzionare.

private void Form1_Shown(object sender, EventArgs e) 
{ 
    textBox2.Focus(); 
} 
+0

+1 Ho provato questo, funziona. –

+0

Questo ha lo stesso problema della soluzione attivata in quanto se si nasconde/mostra lo stesso modulo, esso ripristinerà sempre lo stato attivo. Questo può o non può essere una buona cosa. –

1

Non chiamare Focus nel caricamento evento. Chiamalo nell'evento Activate. Funzionerebbe

+0

Inoltre, la casella di testo riceve il focus ogni volta che viene attivato il modulo, il che potrebbe non essere desiderabile. –

+0

oh si. Ho perso quel dettaglio – Sahas

+0

Quindi quale sarà il modo migliore? Attivare l'evento o impostare TabOrder? – Vicky

1

È possibile impostare la proprietà TabIndex della casella di testo su 0 se si desidera sempre lo stato attivo sulla casella di testo al caricamento del modulo. (Questa proprietà è sempre eventualmente impostata nel form.designer.cs. E non dovrai scrivere alcun codice aggiuntivo nel tuo form.cs.)