2009-02-19 12 views
1

Je souhaite activer une zone de texte de recherche lorsque l'utilisateur commence à saisir quelque chose (même si la zone de texte n'est pas centrée). Je suis venu jusqu'à définir KeyPreview sur le formulaire à true. Ensuite, dans le gestionnaire d'événements KeyDown, j'ai ceci:C#: Activer une zone de texte lorsque l'utilisateur commence à taper

if(!searchTextBox.Focused) 
{ 
    searchTextBox.Focus(); 
} 

Cela fonctionne presque. La zone de texte est ciblée, mais la première lettre saisie est perdue. Je suppose que c'est parce que la boîte de texte n'a jamais vraiment l'événement, car il n'était pas concentré quand il s'est produit. Alors, est-ce que quelqu'un a une solution intelligente à la façon dont je pourrais faire ce travail comme il se doit?

Je voudrais aussi quelques conseils pour que cela ne se produise que lorsque les touches normales sont pressées. Donc pas comme, les touches fléchées, les touches de modification, les touches de fonction, etc. Mais cela, je vais probablement trouver une façon de le faire. Le problème précédent en revanche, je ne suis pas sûr comment je devrais aborder ...

Répondre

4

En complément de la réponse de SDX2000, jetez un coup d'œil au MSDN article pour l'événement KeyDown. Il fait également référence à l'événement KeyPressed, qui est déclenché après l'événement KeyDown, je pense qu'il est mieux adapté à ce que vous voulez faire.

MSDN Citation:

A KeyPressEventArgs spécifie le caractère qui est composé lorsque l'utilisateur appuie sur une touche. Par exemple, lorsque l'utilisateur appuie sur SHIFT + K, la propriété KeyChar retourne une majuscule K.

private void YourEventHandler(object Sender, KeyPressEventArgs Args) 
{ 
    if(!searchTextBox.Focused) 
    { 
     searchTextBox.Focus(); 
     searchTextBox.Text += Args.KeyChar; 
     // move caret to end of text because Focus() selects all the text 
     searchTextBox.SelectionStart = searchTextBox.Text.Length 
    } 
} 

Je suis en fait pas certain que vous pouvez utiliser pour ajouter += char à une chaîne, vous devez donc pour vérifier cela. Et je ne sais pas ce qui se passe quand l'utilisateur frappe return, mieux suivi un problème aussi bien.

+0

+ = semble fonctionner. Bien que la propriété s'appelle Text, pas Value. Donc, vous pourriez peut-être corriger cela dans votre exemple :) – Svish

+0

Aussi, je devais ajouter searchTextBox.SelectionStart = searchTextBox.Text.Length à la fin, parce que quand je Focus() il sélectionne tout le texte. Donc, quand l'utilisateur continue à taper, tout disparaît ..: p Autre que cela, cela fonctionne totalement :) – Svish

+0

Droit, éditera ma réponse en conséquence. – Treb

3

Vous obtiendrez le premier coup de clé dans le cadre de l'événement KeyDown. Vous pouvez l'enregistrer dans la zone de texte.

+1

Mais comment cela fonctionne-t-il avec les lettres non-ascii? Surtout en pensant à diverses touches de modification etc étant utilisés ... – Svish