2010-11-22 14 views
1

Je suis abit nouveau en C# et j'essaye d'insérer un objet à CheckedListBox, ainsi cet article inséré aura un titre dans la liste vérifiée (mon objet contient un champ de chaîne à l'intérieur que je veux être affiché dans CheckedListBox). par exemple ceci est ma classe:difficulté insérer un nom à un objet inséré d'une liste de contrôle

public class InfoLayer 
{ 
    private string LayerName; 
    private List<GeoInfo> GeoInfos; 
    public InfoLayer() 
    { 
     LayerName = "New Empty Layer"; 
     GeoInfos = new List<GeoInfo>(); 
    } 
    public InfoLayer(string LayerName) 
    { 
     this.LayerName = LayerName; 
     GeoInfos = new List<GeoInfo>(); 
    } 
    public InfoLayer(string LayerName,List<GeoInfo> GeoInfosToClone):this(LayerName) 
    { 
     foreach (GeoInfo item in GeoInfosToClone) 
     { 
      GeoInfos.Add((GeoInfo)((ICloneable)item).Clone()); 
     } 
    } 
    public GeoInfo SearchElement(long id) 
    { 
     foreach (GeoInfo info in GeoInfos) // foreach loop running on the list 
     { 
      if (info.INFOID == id) 
       return info; // return the item if we found it 
     } 
     return null; 
    } 

    public GeoInfo SearchElement(string name) 
    { 
     foreach (GeoInfo info in GeoInfos) 
     { 
      if (info.INFONAME.CompareTo(name)==0) 
       return info; 
     } 
     return null; 
    } 

    public override string ToString() 
    { 
     string toReturn = ""; 
     for (int i = 0; i < GeoInfos.Count; i++) // for loop running on the list 
     { 
      toReturn += String.Format("{0}\n",GeoInfos[i].ToString()); // piping another geoinfo 
     } 
     return toReturn; 
    } 

    public string LAYERNAME{get{return LayerName;}} 

ma classe contient également une overrider ToString en elle (pas ce que je veux afficher)

merci à l'avance pour votre aide.

+0

pouvez-vous nous montrer un code de votre essai et de la classe? –

+0

Comment aimeriez-vous que votre nouvelle ligne apparaisse dans votre CheckedListBox? –

+0

le nom de la couche je peux créer un accessoire pour cela ... ma classe contient un champ de nom de chaîne je vais ajouter le prop à la question –

Répondre

1

Remplacer ToString() dans votre classe, la classe dont l'objet est une instance.

Edit:

Vous ne voulez pas afficher le contenu de ToString(). Vous voulez afficher le LayerName, n'est-ce pas? Peut-être que vous devriez afficher les valeurs avec Databinding à la place. Ensuite, vous pouvez définir DisplayMember à votre nouvelle propriété LAYERNAME.

+0

+1 J'avais mal compris la question et ta réponse l'a clairement fait comprendre. =) –

+0

@Nadav: Si ToString() ne fonctionne pas, quel texte apparaît dans CheckedListBox lorsque vous ajoutez votre objet? –

+0

rien ........ –

0

Je crois que c'est ce que vous essayez d'atteindre.

checkedListBox1.Items.Add(yourObject.stringField); 
+0

Non je veux que la liste contienne l'objet et la case à cocher pour avoir le champ txt de l'objet comme nom. cela aurait été si facile si c'était le cas –

0

((MyObjectType) checkedListBox1.Items (index)) Name = "whatever"

Vous devez savoir la index de l'objet que vous voulez changer.

Vous devrez juste remplacer la méthode ToString dans votre classe afin qu'elle renvoie cette valeur de propriété Name.

public overrides string ToString() { 
    return Name; 
} 

Il affiche alors son nom lorsqu'il est ajouté à votre CheckedListbox.

+0

je ne veux pas changer un champ à l'intérieur de mon objet –

+0

je veux la checklistbox avoir à côté de l'élément inséré le nom de l'article que je vais mettre –

+0

Il aurait été plus clair pour le mentionner dans votre question, si je puis dire. =) Edité ma réponse. –