locked
AutoCompleteBox, pas de Key.enter RRS feed

  • Question

  • Bonjour,

    Je bloque sur le manque que dans l'event de KeyDown du Toolkit:AutoCompleteBox.

    Ainsi, une fois que l'utilisateur valide sa saisie (j'utilise le InpusScope = maps), le lance ma méthode de recherche mais là j'ai pas

    if (e.Key == Key.Enter) ...

    an idea ?

    Merci, Christophe


    Toss.net

    mercredi 19 septembre 2012 16:32

Réponses

  • Voilà, à défaut de key.Enter, ce que j'ai fait : Un bouton à droite pour inviter l'utilisateur à lancer une recherche et via gotFocus et LasFocus, m'abonner à SelectedChange ou pas afin d'effacer le contenu au retour du focus sinon si l'utilisateur effacer (Backspace) le contenu à chaque pression, ça lancer la recherche :

    private void txtSearch_SelectionChanged(object sender, SelectionChangedEventArgs e)
    		{
    			Searching();
    		}
    
    		private void txtSearch_GotFocus(object sender, RoutedEventArgs e)
    		{
    			txtSearch.Text = "";
                this.txtSearch.SelectionChanged += new
                        SelectionChangedEventHandler(txtSearch_SelectionChanged); 
    		}
    
            private void txtSearch_LostFocus(object sender, RoutedEventArgs e)
            {
                this.txtSearch.SelectionChanged -= new
                        SelectionChangedEventHandler(txtSearch_SelectionChanged); 
            }
    
    
    		private void btnSearch_Click(object sender, RoutedEventArgs e)
    		{
    			if (txtSearch.Text.Length == 0) return;
    			Searching();
    		}


    Toss.net

    • Marqué comme réponse Aurel Bera jeudi 11 octobre 2012 14:17
    jeudi 20 septembre 2012 12:14

Toutes les réponses

  • flemme de tester, e.Key vaut combien quand tu fais entrée ?

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mercredi 19 septembre 2012 16:40
  • y'a rien, on arrive pas dans la méthode. La seule chose que j'ai trouvé mais j'ai rien compris où ça parle d'inherit de l'OnKeyDown....


    Toss.net

    mercredi 19 septembre 2012 16:42
  • Le code donne ceci :

    public class MyAutoCompleteBox : AutoCompleteBox
    	{
            protected override void OnKeyDown(KeyEventArgs e)
            {
                base.OnKeyDown(e);
                if (e.Key == Key.Enter) RaiseEnterKeyDownEvent();
            }
    
    		public event Action<object> EnterKeyDown;
    		private void RaiseEnterKeyDownEvent()
    		{
    			var handler = EnterKeyDown;
    			if (handler != null) handler(this);
    		}
    	} 

    Mais suis pas sur que ça fonctionne sur Windows Phone et ne sais même pas comment l'utilisé !

    Help


    Toss.net

    mercredi 19 septembre 2012 16:43
  • Fais un event plutot !!!!

    <truc:AutoCompleteBox KeyDown="MonEvent_KeyDown" />

    (utilises les propriétés de Blend ou de VS pour te simplifier la vie)


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mercredi 19 septembre 2012 16:48
  • J'ai déjà ! T'as pas pigé le problème :

    private void txtSearch_KeyDown(object sender, KeyEventArgs e)
    		{
    			if (e.Key == Key.Enter)
    			{
    (...)
    C'est que lorsqu'on presse le bouton ENTER du clavier, on n'arrive pas dans KeyDown !, comme si Key.Enter n'a pas été prévue


    Toss.net

    mercredi 19 septembre 2012 16:51
  • il est avalé par le contrôle en fait, 
    OnSelectionChanged te suffit pas ?

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mercredi 19 septembre 2012 17:00
  • ou sinon :

    public class MyAutoCompleteBox : AutoCompleteBox { protected override void OnKeyDown(KeyEventArgs e) { if (e.Key == Key.Enter) RaiseEnterKeyDownEvent();

    base.OnKeyDown(e);

    } public event Action<object> EnterKeyDown; private void RaiseEnterKeyDownEvent() { var handler = EnterKeyDown; if (handler != null) handler(this); } }


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mercredi 19 septembre 2012 17:04
  • disons que dernière je balaie par un foreach et à chaque sélection dans la liste d'autocomplet c'est ok, sauf que si l'utilisateur revient dans le txtsearch et frappe des caractères, ça relance la boucle...

    Toss.net

    mercredi 19 septembre 2012 17:06
  • alors ok mais tuto moi comment j'utilise cette public class MyAutoCompleteBox dans mon code. J'ai ces lignes en bas de ma classe... et après !?

    Toss.net

    mercredi 19 septembre 2012 17:08
  • Voilà, à défaut de key.Enter, ce que j'ai fait : Un bouton à droite pour inviter l'utilisateur à lancer une recherche et via gotFocus et LasFocus, m'abonner à SelectedChange ou pas afin d'effacer le contenu au retour du focus sinon si l'utilisateur effacer (Backspace) le contenu à chaque pression, ça lancer la recherche :

    private void txtSearch_SelectionChanged(object sender, SelectionChangedEventArgs e)
    		{
    			Searching();
    		}
    
    		private void txtSearch_GotFocus(object sender, RoutedEventArgs e)
    		{
    			txtSearch.Text = "";
                this.txtSearch.SelectionChanged += new
                        SelectionChangedEventHandler(txtSearch_SelectionChanged); 
    		}
    
            private void txtSearch_LostFocus(object sender, RoutedEventArgs e)
            {
                this.txtSearch.SelectionChanged -= new
                        SelectionChangedEventHandler(txtSearch_SelectionChanged); 
            }
    
    
    		private void btnSearch_Click(object sender, RoutedEventArgs e)
    		{
    			if (txtSearch.Text.Length == 0) return;
    			Searching();
    		}


    Toss.net

    • Marqué comme réponse Aurel Bera jeudi 11 octobre 2012 14:17
    jeudi 20 septembre 2012 12:14
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?

    Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 11 octobre 2012 14:17