Collection

jeanajaccio Messages postés 39 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 29 août 2007 - 20 févr. 2004 à 16:07
taharban Messages postés 56 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 14 novembre 2007 - 23 févr. 2004 à 10:59
Salut à tous,

Je vais essayer d'expliquer ma demande le + simplement possible : je code un composant dans lequel je souhaite implémenter une collection :

j'ai un user control UC
une classe CItem
une classe CCollection qui hérite de CollectionBase

Dans UC: j'ai créé une propriété de type CCollection Items pour créer des instances de CItem. Lorsque je clique sur le bouton où il y a les 3 points et que je clique sur ajouter j'arrive à Sytem.Object au lieu de mon instance de CItem. Ca fait deux heures que je bataille quelqu'un peut m'aider ?

Merci

Jean

11 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 févr. 2004 à 16:45
met du code montrant ce que tu fais pour l'ajout

Cocoricoooooooo !!!!
0
jeanajaccio Messages postés 39 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 29 août 2007
21 févr. 2004 à 08:49
Salut,

Voici le code dans la classe collection qui hérite de Collection Base :

public class CCollection:CollectionBase
{

public CItem Add(CItem citem)
{
List.Add(citem);
return citem;
}
public CItem Add(string Title)
{
CItem citem = this.Add(new CItem(Title));
List.Add(citem);
return citem;
}

public void Remove(int index)
{
if (index > Count - 1 || index < 0)
{
System.Windows.Forms.MessageBox.Show("Index non valide!");
}
else
{
List.RemoveAt(index);
}
}

public CItem Item(int Index)
{
return (CItem) List[Index];
}

public CCollection()
{

}
}

Je te remercie

A +
Jean
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 févr. 2004 à 09:55
et C a quel niveau là dedans que tu te retrouve avec un System.Object au lieu de ton CItem ?

sinon tu parles de quoi par "Lorsque je clique sur le bouton où il y a les 3 points" ?

Cocoricoooooooo !!!!
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 févr. 2004 à 09:57
hum, G comme un doute là :
tu parlerais pas de l'editeur de propriétés sur le concepteur graphique quand tu ajoute ton UC sur le projet ?
si C ça je crois qu'il y a qq manips a faire avant de pouvoir ajouter des items comme on peut le faire sur les listview et autres fournis avec le framework

Cocoricoooooooo !!!!
0

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

Posez votre question
jeanajaccio Messages postés 39 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 29 août 2007
22 févr. 2004 à 10:55
Salut,

C'est exactement ça, je programme un contrôle équivalent à une listview mais avec des fonctions améliorées (ajout d'images dans les subitems par exemple).
J'ai déjà réussi en faisant hériter ma classe collection de collectionbase à initier l'éditeur de propriétés mais je n'arrive pas à instancier des classes Items.

Merci coq
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
22 févr. 2004 à 11:05
erf
je pense qu'il y a qq instructions entre [] a mettre pour dire de pouvoir manipuler dans le concepteur graphique
et là j'avoue que je ne m'y suis encore jamais frotter à ça

Cocoricoooooooo !!!!
0
jeanajaccio Messages postés 39 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 29 août 2007
22 févr. 2004 à 12:36
Dommage merci qd même
0
cs_cpetitjean Messages postés 4 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 19 mai 2010
23 févr. 2004 à 09:51
C'est ton indexeur qui n'est pas bon apparemment, tu utilises la méthode Item, qui en fait doit être écrite comme ça :

public CItem this[int index]
{
get
{
return (CItem)this.List[index];
}
set
{
this.List[index] = value;
}
}

et je penses qu'au niveau du constructeur, il faut que tu précises qu'il hérite de la classe de base.

public CCollection() : base()
{
}

J'ai fait un objet dans le même genre et ça, ça fonctionne.
Bon courage.
0
jeanajaccio Messages postés 39 Date d'inscription jeudi 23 janvier 2003 Statut Membre Dernière intervention 29 août 2007
23 févr. 2004 à 10:28
Salut Coq et cpetitjean,

je crois que j'ai trouvé la solution à l'url suivante (sorry c'est en anglais) :
http://www.codeproject.com/csharp/DzCollectionEditor.asp?target=collection

A + et merci

Jean
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
23 févr. 2004 à 10:43
t'inquiete je commence a etre assez habitué à codeproject
faudra que je lise ça

Cocoricoooooooo !!!!
0
taharban Messages postés 56 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 14 novembre 2007
23 févr. 2004 à 10:59
Voilà ce que je fais pour avoir une combobox avec l'image d'un drapeau et le nom du drapeau :

this.Cbb1.DrawMode = DrawMode.OwnerDrawFixed;
this.Cbb1.Items.AddRange(Nationalité_Liste);
this.Cbb1.ItemHeight = 18;
this.Cbb1.DrawItem += new DrawItemEventHandler(this.Cbb1_DrawItem);

pour la déclaration, et pour dessiner chaque item :
il faut avoir imageList2 et le tableau Nationalité_Liste déjà remplis avec le même nombre d'items
protected void Cbb_DrawItem(object sender, DrawItemEventArgs e) {
e.DrawBackground();
Font myFont = new Font("Tahoma", 8 , FontStyle.Regular, GraphicsUnit.Point, ((Byte) (0)) );
e.Graphics.DrawString(Nationalité_Liste[e.Index]), myFont, Brushes.Black, new Rectangle(e.Bounds.X+36, e.Bounds.Y+3, 90, 16));
Image drapeau = imageList2.Images[e.Index-1];
e.Graphics.DrawImage(drapeau, new Rectangle(e.Bounds.X+2, e.Bounds.Y+1, 32, 16));

e.DrawFocusRectangle();
}
0
Rejoignez-nous