Redéfinir la propriété Text d'un Combobox

Signaler
Messages postés
5
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
11 mai 2007
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
-
Bonsoir,

J'ai une combobox dont je voudrais redéfénir la propriété Text après avoir sélectionné un item.
Je donne un exemple :
La Combobox contient des string "a", "b" et "c". J'aimerais que quand je clique sur a, la propriété Text ait la valeur "Item a" (c'est qu'un exemple..)

J'ai essayé d'utiliser SelectedIndexChanged, SelectedValueChanged et SelectionChangeComitted mais apparemment ces évènements sont déclenchés avant que la Combobox ne change elle-même Text.

Est-ce que quelqu'un a un moyen de faire ça ? (Même pas très propre ça convient :p)
Merci pour les réponse :)

5 réponses

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Bonsoir,
Tu créé un control utilisateur qui hérite de Combobox puis tu redéfinis (override) la propriété Text dont son accesseur Get.

++
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Comme lien complémentaire, je te donne cette source pour customizer un combobox

<hr />
-Blog-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
j'aime pas l'idée de surcharger un combo pour faire ca :(

il suffit de faire ceci :

public class ComboItem {
   private string value;
   private string label;

   public ComboItem(string label, string value) {
      this.label = label;
      this.value = value;
   }

   public string Label {
      get {return this.label;}
      set {this.label = value;}
   }

   public string Value {
      get {return this.value;}
      set {this.value = value;}
   }

   public override string ToString() {
      return string.Concat("Item ", this.label);
   }
}

ensuite, il suffit d'ajouter les items de cette manière :

monCombo.Items.Add(new ComboItem("a","valeurDeA"));
monCombo.Items.Add(new ComboItem("b","valeurDeB"));
monCombo.Items.Add(new ComboItem("c","valeurDeC"));

etc...

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
5
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
11 mai 2007

Bonjour;

Merci pour les réponses :)

Willi >> En fait c'est un peu plus compliqué que ça. Les élément de ma ComboBox sont des objet issue d'une classe ServerParameter que voila :

public class ServerParameter
    {
        private ClientInfos infos;
        private string server;
        private int port;

        public ServerParameter(ClientInfos infos, string server, int port)
        {
            this.server = server;
            this.port = port;
            this.infos = infos;
        }

        public ClientInfos Infos
        {
            get{return this.infos;}
            set{this.infos = value;}           
        }

        public string Server
        {
            get{return this.server;}
            set{this.server = value;}
        }

        public int Port
        {
            get{return this.port;}
            set{this.port = value;}
        }

        public override string ToString()
        {
           return string.Concat(this.Server, ":", this.port.ToString());
        }
    }

En fait j'utilise ma ComboBox comme une TextBox ou l'utilisateur rentre l'adresse du serveur, le port est dans une autre TextBox, mais je veux que ce qui soit affiché dans la liste soit de la forme serveur:port, et que quand je clique sur un élément je récupère juste le serveur.

sebmafate >> Si j'ai bien compris c'est la propriété Label qui serait utilisée pour l'affichage dans la liste, et la méthode ToString pour renseigner la propriété Text ? En tout cas ça ne marche pas, c'est toujours ToString qui est appelée :(

Merci en tout cas :)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
justement... ce qui est affiché dans la liste vient toujours de ToString()...
il suffit donc de faire : 

        public override string ToString()
        {
           return string.Concat(this.Server, ":", this.port<strike>.ToString()</strike>); // le ToString() n'est pas nécessaire
        }

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]