2009-12-16 5 views
0

J'ai un problème d'affichage d'un objet dans une zone de liste cochée en C#. Je peux ajouter l'objet bien, mais quand l'objet est montré à l'utilisateur, au programme sort la sélection de case à cocher comme Salesform.order au lieu d'invoquer la méthode tostring dans la classe d'ordre comme je veux. Cela se traduit par plusieurs commandes affichant la même chose: "Salesform.order".Ma liste de contrôle en C# montre le type de l'objet à afficher, mais pas le nom de celui-ci

orderCheckList.Items.Add(orderUp); 

(ici, orderUp est un ordre avec des domaines tels que le nom du client et ainsi de suite)

Quelqu'un peut-il aider? Je sais qu'il y a une solution simple que je néglige.

Répondre

6

Définissez le DisplayMember du CheckedListBox sur la propriété que vous souhaitez afficher. Par exemple:

orderCheckList.DisplayMember = "Title"; 
// Now orderUp.Title will be displayed 

(. Redéfinition ToString() fonctionnera aussi bien, comme le suggère Ragepotato, mais en utilisant DisplayMember est plus souple que cela signifie que vous pouvez utiliser le même type de données dans divers contextes différents)

Exemple de code :

using System.Windows.Forms; 

class Test 
{ 
    static void Main() 
    { 
     Form f = new Form 
     { 
      Controls = 
      { 
       new CheckedListBox 
       { 
        Items = 
        { 
         new { FirstName = "Jon", LastName = "Skeet" }, 
         new { FirstName = "Holly", LastName = "Skeet" } 
        }, 
        DisplayMember = "FirstName" 
       } 
      } 
     }; 
     Application.Run(f); 
    } 
} 
+0

Merci pour cette réponse. Mais comment pourrais-je avoir accès à "LastName"? Le type est anonyme, donc je ne peux pas le lancer. – Paval

+1

@Paval: D'où? Vous devez généralement définir 'ValueMember =" LastName "', puis obtenir les valeurs. –

4

.ToString() est appelée sur chaque élément que vous ajoutez à la zone de liste. Remplacez-le pour résoudre ce problème.