Selection dans un combobox efface le texte

Résolu
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 27 nov. 2012 à 16:58
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 - 20 déc. 2012 à 11:21
Salut à tous,
J'ai créé une combobox de type dropdown, pour rechercher dans une base existante. Il faut commencer par taper au moins 3 lettres, puis, via un algorithme, les possibilités s'affichent, et l'on peut sélectionner la bonne, ou alors taper à la main.
La validation n'Est possible que si le terme exact existe.
J'ai donc créé un évènement sur Text_Changed.
Le problème, c'Est que si je sélectionne un élément existant, il le valide (Le bouton OK est "Enabled", mais efface le contenu dans la dropdown. J'ai bien regardé, c'Est mon seul et unique évènement sur la combobox.
J'ai testé la valeur de text du combobox, et jusqu'à la fin elle n'Est pas vide.
Ci joint la fonction de l'évènement :
private void comboBoxSerieName_SelectedValueChanged(object sender, EventArgs e)
{
this.comboBoxSerieName.TextChanged -= new System.EventHandler(this.comboBoxSerieName_SelectedValueChanged);
serieUrlName = "";
string comboboxValue = comboBoxSerieName.Text;
comboBoxSerieName.Items.Clear();
createButton.Enabled = false;
if (comboBoxSerieName.Text.Length >= 3)
{
this.Enabled = false;

WebClientManagement wcmNewSeriesList = new WebClientManagement("search", "", "title=" + comboboxValue);
foreach (WebClientManagement thisWcm in wcmNewSeriesList.getValuesFromXML("show"))
{
string thisWcmText = thisWcm.getValueFromXML("title");
if (comboboxValue == thisWcmText)
{
serieUrlName = thisWcm.getValueFromXML("url");
createButton.Enabled = true;
}
else
comboBoxSerieName.Items.Add(thisWcmText);
}
this.Enabled = true;
}
comboBoxSerieName.Select(comboboxValue.Length, comboboxValue.Length);
this.comboBoxSerieName.TextChanged += new System.EventHandler(this.comboBoxSerieName_SelectedValueChanged);

}

Merci beaucoup de votre aide.


@+. Hermios
A voir également:

6 réponses

Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
18 déc. 2012 à 15:18
Salut madkeyboard
Merci pour ta réponse. En fait, j'ai effectivement trouvé entre temps, et complètement oublié mon post, dsl!
La solution est toute simple : La listviewitem possède déjà cette propriété!
En effet, on peut définir la source dans les propriétés de l'objet. donc dès qu'une lettre est tapée, il me suffit de redéfinir cette propriété.
Malheureusement, je n'ai pas mon code sur moi pour retrouver le nom exact de cette propriété, je me rappelle juste qu'il y a le mot "source" dedans (Assez facile à retrouver, donc!)
Merci en tout cas pour ton aide.

P.S.: Ta solution ne marcherait pas : Même la méthode Enabled n'empêche l'accès que pour l'utilisateur. Le code lui même peut modifier le contenu, et appeler quand même la méthode. Donc y aurait pas vraiment le choix, il faudrait avant tout désactiver l'appel.


@+. Hermios
3
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
28 nov. 2012 à 10:42
Bonjour,
Passe en mode debug et met un point d'arrêt au début de ta fonction pour vérifier qu'un item est bien ajouté à ta liste
Bon déboguage


louis
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
28 nov. 2012 à 11:06
Bonjour Louis,
1- Je ne comprend pas ta phrase : Les items sont toujours bien ajoutés dans la liste. Le problème c'est que si j'en sélectionne un, il apparait dans la fenêtre principale, puis disparait (Et donc la liste disparait, mais ca c'Est normal).
2- J'ai fait ca... Aucun problème, le programme se comporte comme attendu. Jusqu'au dernier moment, la valeur est affichée dans le texte, puis la dernière ligne , avec l'ajout du Handler, est appelée une seconde fois (ca par contre, je sais pas pourquoi!), et là, la valeur disparait!


@+. Hermios
0
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 1
18 déc. 2012 à 11:00
Salut,

Je ne sais pas si tu as trouvé une solution depuis le temps, mais je te propose juste un truc !
Personnellement, j'éviterais de virer la réaction à un évènement pour la remettre à la fin.
Tu aurais meilleurs temps à bloquer le control pendant que ta méthode s'exécute.

Du coup, à la place de :
this.comboBoxSerieName.TextChanged -= new System.EventHandler(this.comboBoxSerieName_SelectedValueChanged);
//...
this.comboBoxSerieName.TextChanged += new System.EventHandler(this.comboBoxSerieName_SelectedValueChanged);

Fait plutôt :
this.comboBoxSerieName.Enable = false;
//...
this.comboBoxSerieName.Enable = true;


Je sais pas si ça va résoudre ton problème, mais si tu avais un soucis lors de l'affectation à l'évènement, ça devrait aller mieux !

Mad Keyboard
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 1
18 déc. 2012 à 11:02
*Enabled je voulais dire ^^
0
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 1
20 déc. 2012 à 11:21
Je pensais que tu voulais juste empêcher l'utilisateur d'y toucher !
Vu que c'est toi qui fait le code, à priori t'avais de raison d'appeler un évènement ^^
Enfin le principal c'est que t'ai ta solution !

A+,
Mad Keyboard
0
Rejoignez-nous