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

Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 27 nov. 2012 à 16:58 - Dernière réponse : madkeyboard 100 Messages postés mercredi 27 avril 2011Date d'inscription 21 décembre 2012 Dernière intervention
- 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 

6 réponses

Répondre au sujet
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 18 déc. 2012 à 15:18
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Hermios
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 28 nov. 2012 à 10:42
0
Utile
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
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 28 nov. 2012 à 11:06
0
Utile
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
madkeyboard 100 Messages postés mercredi 27 avril 2011Date d'inscription 21 décembre 2012 Dernière intervention - 18 déc. 2012 à 11:00
0
Utile
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
madkeyboard 100 Messages postés mercredi 27 avril 2011Date d'inscription 21 décembre 2012 Dernière intervention - 18 déc. 2012 à 11:02
0
Utile
*Enabled je voulais dire ^^
Commenter la réponse de madkeyboard
madkeyboard 100 Messages postés mercredi 27 avril 2011Date d'inscription 21 décembre 2012 Dernière intervention - 20 déc. 2012 à 11:21
0
Utile
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.