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

Galaid Messages postés 5 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 11 mai 2007 - 20 mars 2007 à 23:42
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 22 mars 2007 à 09:57
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

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

++
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 mars 2007 à 08:13
Comme lien complémentaire, je te donne cette source pour customizer un combobox

<hr />
-Blog-
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
21 mars 2007 à 09:48
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]
0
Galaid Messages postés 5 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 11 mai 2007
21 mars 2007 à 16:47
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 :)
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
22 mars 2007 à 09:57
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]
0
Rejoignez-nous