Récupérer un struc à partir d'un de ses élément

Résolu
Boozdeuvash Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 19 septembre 2006 - 11 sept. 2006 à 12:05
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 11 sept. 2006 à 18:32
C'est peut-être complètement tordu, mais j'aimerais faire ceci:

J'ai un struct appelée "camion" qui contient trois string : marque, vitesse, chauffeur

J'aia créé 3 variables camions  : Cam1, Cam2 et Cam3

J'ai une listBox avec 3 éléments : il s'agit des :

Cam1.chauffeur, Cam2.chauffeur et Cam3.chauffeur, j'ai donc une liste avec le nom des trois chauffeurs


Lorsque je clic sur un élément de la liste, je le récupère avec :

listBox.selectedItem.ToString()

j'aimerais récupérer la variable "camion" auquel elle appartient pour
pouvoir ensuite afficher la marque et la vitesse dans un label. Et je
n'ai aucune idée de la façon de le faire.


une autre méthode serait d'associer un objet à chaque élément d'une listBox, mais je suis pas sur que ce soit possible.


Donc si quelqu'un a une solution pratique, facile et efficace , ça serait super.

Si vous avez une solution peu pratique, pas facile mais quand même efficace, ça ira aussi :)

14 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
11 sept. 2006 à 12:31
Salut,

C'est tres facile a faire.
Ajoutes toutes les instances de Camion dans une List<Camion> (ou ArrayList si tu bosses en .Net 1).
Affecte cette List a la propriété DataSource de ton ListBox;
Affecte la ta propriété "Chauffeur" de ta classe Camion a la propriété DisplayMember de ton ListBox.

Tu peux maintenant recuperer l'instance du camion selectionné via la propriété SelectedItem de ton ListBox :)

Mx
MVP C# 
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2006 à 12:32
Salut,
C'est évident qu'il faut associer ton object à ta liste, pas juste un string :

this.listBox1.Items.Add(monCamion);
// Ajout du camion
Camion camion =
this.listBox.SelectedItem
as
Camion;
// Récupération du camionIl ne serait pas inutile de vérifier que camion n'est pas null...
Et sachant que la ListBox affiche le string renvoyer par ToString(), il suffit d'overrider cette dernière dans la classe camion pour personnaliser l'affichage...

<hr size="2" />VC# forever
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2006 à 12:34
Eu par le refresh (pour changer...)

<hr size="2" />VC# forever
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
11 sept. 2006 à 12:45
Ca te fera que la 2eme fois aujourd'hui ;)

Mx
MVP C# 
0

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

Posez votre question
Boozdeuvash Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 19 septembre 2006
11 sept. 2006 à 13:16
Bien, merci pour ces réponses, mais ça n'est pas encore tout à fait fini, désolé.


voici ce que j'ai fais:

private void achatVeh_Load(object sender, EventArgs e)

        {

            List<camion> mylist = new List<camion>();

            mylist.Add(Cam1);

            mylist.Add(Cam2);

            mylist.Add(Cam3);

            listVehicules.DataSource = mylist;

            listVehicules.DisplayMember = chauffeur;

        }

c'est sur cette dernière ligne que ça bloque, ça marche pas vu que ce
qui est affiché dans la listebox est "windowsApplication2.camio,". Un
peu ennuyeux, si vous pouviez m'expliquer ce qu'il faut mettre en
displaymember sachant que ma struct est ainsi:

public struct camion

{

public string marque

public string vitesse

public string chauffeur

}


Merci
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
11 sept. 2006 à 13:26
il te faut une propriété Chauffeur dans ta structure.

public string Chauffeur
{
   get { return this.chauffeur; }
  //set { this.chauffeur = value;}
}

et assignes "Chauffeur" au DisplayMember
... et par la meme occasion, passer ton champ chauffeur en private

Mx
MVP C# 
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2006 à 13:27
Faut faire une Property avec un get pour que ça marche...

<hr size="2" />VC# forever
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2006 à 13:28
Non mais c'est pas vrai ! Mx, t'arrêtes !

<hr size="2" />VC# forever
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
11 sept. 2006 à 13:39
Désolé
La prochaine, s'il y a, je te la laisse

Mx
MVP C# 
0
Boozdeuvash Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 19 septembre 2006
11 sept. 2006 à 13:48
Ahr, c'est rageant ça marchait presque:

Si je fais exactement comme tu me dit mx, j'ai une erreur lors de
l'affectation de la variable cam1.chauffeur (et aussi cam2.chauffeur
etc...):   La propriété ou l'indexeur
'WindowsApplication2.form1.camion.chauffeur' ne peut pas être assigné
-- il est en lecture seule   


Si je met aussi le set, il me génère un stack overflow (boucle
infinie?). Enfin, si j'enlève les affectations de variables, j'ai aussi
un stackoverflow.


Bref, plus ça avance, plus ça me parait compliqué.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2006 à 14:31
Exemple :

public
partial
class
Form1 :
Form
{
  
public Form1()
   {
      InitializeComponent();
   }

  
private
void Form1_Load(
object sender,
EventArgs e)
   {
     
List<
Camion> camions =
new
List<
Camion>();
      camions.Add(
new
Camion(1,
"Un"));
      camions.Add(
new
Camion(2,
"Deux"));
      camions.Add(
new
Camion(3,
"Trois"));
      camions.Add(
new
Camion(4,
"Quatre"));
     
this.listBox1.DataSource = camions;
     
this.listBox1.DisplayMember =
"Name";
   }
}

public
struct
Camion
{
  
private
int _age;
  
private
string _name;

   public Camion(
int age,
string name)
   {
     
this._age = age;
     
this._name = name;
   }

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

<hr size="2" />VC# forever
0
Boozdeuvash Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 19 septembre 2006
11 sept. 2006 à 14:32
En fait c'est bon, c'est juste que je suis pas assez rigoureux, j'ai attribué le même nom à la variable et au conteneur de GET{}


Merci à vous deux pour vos réponse, je retourne dans mes pénates.
0
Boozdeuvash Messages postés 8 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 19 septembre 2006
11 sept. 2006 à 14:33
Ah ben moi aussi chuis eu par le refresh. C'est frustrant! ;)
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2006 à 18:32
Bah, on s'y fait lol

<hr size="2" />VC# forever
0
Rejoignez-nous