Selection dans un combobox efface le texte [Résolu]

Messages postés
265
Date d'inscription
dimanche 14 avril 2013
Dernière intervention
23 mai 2014
- - Dernière réponse : madkeyboard
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
265
Date d'inscription
dimanche 14 avril 2013
Dernière intervention
23 mai 2014
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Hermios
Messages postés
788
Date d'inscription
mardi 8 juillet 2003
Dernière intervention
8 mars 2017
0
Merci
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
Commenter la réponse de cs_louis14
Messages postés
265
Date d'inscription
dimanche 14 avril 2013
Dernière intervention
23 mai 2014
0
Merci
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
Commenter la réponse de Hermios
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
Dernière intervention
21 décembre 2012
0
Merci
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
Commenter la réponse de madkeyboard
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
Dernière intervention
21 décembre 2012
0
Merci
*Enabled je voulais dire ^^
Commenter la réponse de madkeyboard
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
Dernière intervention
21 décembre 2012
0
Merci
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
Commenter la réponse de madkeyboard

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.