2009-04-14 9 views
1

J'ai créé une barre d'outils qui comporte trois contrôles. Le premier étant une zone de texte, un bouton OK et un bouton Effacer. Essentiellement, j'utilise cette barre d'outils pour rechercher du texte. Quand il n'y a aucun résultat trouvé, j'ouvre une boîte de message informant l'utilisateur qu'aucun résultat n'a été trouvé. Mais lorsque l'utilisateur clique sur le bouton "OK" de la boîte de message, la zone de texte perd le focus et le focus passe au contrôle suivant qui est le bouton "OK". Que dois-je faire pour éviter la zone de texte pour perdre le focus. J'utilise C#.La boîte de message provoque une perte de focus

Répondre

2

Vous ne pouvez pas. Cliquer sur le bouton Ok le force à avoir le contrôle (et donc la zone de texte perd le contrôle).

Vous pouvez cependant faire sur votre événement click:

MessageBox.Show("asdf"); 
textBox1.Focus(); 

EDIT

En réponse à votre commentaire, je ne pense pas qu'il y ait un moyen facile de Repassez le dernier contrôle une fois qu'un autre contrôle a reçu le focus, et les boutons de recherche et d'effacement devront recevoir le focus quand on clique dessus. Vous pouvez le faire:

private Control _last; 

private void textBox1_Leave(object sender, EventArgs e) 
{ 
    _last = (Control) sender; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("asdf"); 
    _last.Focus(); 
} 
+0

Merci pour la réponse. Je me demandais s'il y avait un moyen de résoudre ce problème sans définir le focus de la zone de texte explicitement. –

0

Il est pas très clair à votre question, mais vous pouvez faire votre commande prendre l'accent comme ceci:

textBox1.Focus(); 
Questions connexes