Personnaliser la collection d'objets (de type ObjectCollection) d'une ListBox
4 réponses
Boris Sargos
Bonjour,
quelqu'un pourrait-il me dire comment on peut personnaliser la collection
d'objets (de type ObjectCollection) d'une ListBox ?
Plus précisément, j'ai défini une classe ObjectCollectionFille dérivée de
ObjectCollection, et j'aimerais pouvoir "caster" le retour de ListBox.Items
comme suit :
Ne pouvant accéder à l'implémentation de ListBox, et sachant que la
propriété Items est en lecture seule, je ne vois pas comment faire. Mais il
y a forcément un moyen, sinon à quoi servirait de pouvoir dériver
ObjectCollection et à pourquoi la propriété Items[int] renverrait-elle un
object au lieu d'un bête string ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Bacelar
Je pense que vous fourvoyez.
"Une bête string" est bien moins générique qu'un objet qui peut contenir un graphe d'objet cyclique ou une référence sur un objet distant. Si la sérialisation (objet->chaîne de caractère) était si évidente, on se demanderait bien pourquoi il y a autant de sérialisations différents et que personne ne veuillent les faire et donc que les framework s'en chargent.
Si vous voulez faire de la vérification de type, utilisez une nouvelle propriété qui check les valeurs en entrée et retourne le bon type en sortie.
My_Items utilisera la propriété Items en interne et fera le caster pour vous et de manière systématique.
-- Paul Bacelar Demandeur d'emploi
"Boris Sargos" wrote in message news:
Bonjour,
quelqu'un pourrait-il me dire comment on peut personnaliser la collection d'objets (de type ObjectCollection) d'une ListBox ? Plus précisément, j'ai défini une classe ObjectCollectionFille dérivée de ObjectCollection, et j'aimerais pouvoir "caster" le retour de
Ne pouvant accéder à l'implémentation de ListBox, et sachant que la propriété Items est en lecture seule, je ne vois pas comment faire. Mais
il
y a forcément un moyen, sinon à quoi servirait de pouvoir dériver ObjectCollection et à pourquoi la propriété Items[int] renverrait-elle un object au lieu d'un bête string ?
Merci pour vos réponses.
Je pense que vous fourvoyez.
"Une bête string" est bien moins générique qu'un objet qui peut contenir un
graphe d'objet cyclique ou une référence sur un objet distant. Si la
sérialisation (objet->chaîne de caractère) était si évidente, on se
demanderait bien pourquoi il y a autant de sérialisations différents et que
personne ne veuillent les faire et donc que les framework s'en chargent.
Si vous voulez faire de la vérification de type, utilisez une nouvelle
propriété qui check les valeurs en entrée et retourne le bon type en sortie.
My_Items utilisera la propriété Items en interne et fera le caster pour vous
et de manière systématique.
--
Paul Bacelar
Demandeur d'emploi
"Boris Sargos" <bsargos@wanadoo.fr> wrote in message
news:ej6wBzjmEHA.952@TK2MSFTNGP14.phx.gbl...
Bonjour,
quelqu'un pourrait-il me dire comment on peut personnaliser la collection
d'objets (de type ObjectCollection) d'une ListBox ?
Plus précisément, j'ai défini une classe ObjectCollectionFille dérivée de
ObjectCollection, et j'aimerais pouvoir "caster" le retour de
Ne pouvant accéder à l'implémentation de ListBox, et sachant que la
propriété Items est en lecture seule, je ne vois pas comment faire. Mais
il
y a forcément un moyen, sinon à quoi servirait de pouvoir dériver
ObjectCollection et à pourquoi la propriété Items[int] renverrait-elle un
object au lieu d'un bête string ?
"Une bête string" est bien moins générique qu'un objet qui peut contenir un graphe d'objet cyclique ou une référence sur un objet distant. Si la sérialisation (objet->chaîne de caractère) était si évidente, on se demanderait bien pourquoi il y a autant de sérialisations différents et que personne ne veuillent les faire et donc que les framework s'en chargent.
Si vous voulez faire de la vérification de type, utilisez une nouvelle propriété qui check les valeurs en entrée et retourne le bon type en sortie.
My_Items utilisera la propriété Items en interne et fera le caster pour vous et de manière systématique.
-- Paul Bacelar Demandeur d'emploi
"Boris Sargos" wrote in message news:
Bonjour,
quelqu'un pourrait-il me dire comment on peut personnaliser la collection d'objets (de type ObjectCollection) d'une ListBox ? Plus précisément, j'ai défini une classe ObjectCollectionFille dérivée de ObjectCollection, et j'aimerais pouvoir "caster" le retour de
Ne pouvant accéder à l'implémentation de ListBox, et sachant que la propriété Items est en lecture seule, je ne vois pas comment faire. Mais
il
y a forcément un moyen, sinon à quoi servirait de pouvoir dériver ObjectCollection et à pourquoi la propriété Items[int] renverrait-elle un object au lieu d'un bête string ?
Merci pour vos réponses.
Boris Sargos
Merci de m'avoir répondu, mais je crains de ne pas avoir tout saisi :
Je pense que vous fourvoyez.
A quel sujet ?
"Une bête string" est bien moins générique qu'un objet qui peut contenir
un
graphe d'objet cyclique ou une référence sur un objet distant. Si la sérialisation (objet->chaîne de caractère) était si évidente, on se demanderait bien pourquoi il y a autant de sérialisations différents et
que
personne ne veuillent les faire et donc que les framework s'en chargent.
???
Si vous voulez faire de la vérification de type, utilisez une nouvelle propriété qui check les valeurs en entrée et retourne le bon type en
sortie.
mylistbox.My_Items.Add(new Mon_Type("toto"));
Si j'ai compris ce que tu veux dire, mylistbox est une instance d'une classe dérivée de ListBox. Autrement dit, je dois créer une classe dérivée de ListBox, avec un code du genre :
public new ObjectCollectionFille My_Items { get { return (ObjectCollectionFille) Items; } } Donc, là, je n'ai rien compris !
Merci de m'éclairer un peu :-(
Merci de m'avoir répondu, mais je crains de ne pas avoir tout saisi :
Je pense que vous fourvoyez.
A quel sujet ?
"Une bête string" est bien moins générique qu'un objet qui peut contenir
un
graphe d'objet cyclique ou une référence sur un objet distant. Si la
sérialisation (objet->chaîne de caractère) était si évidente, on se
demanderait bien pourquoi il y a autant de sérialisations différents et
que
personne ne veuillent les faire et donc que les framework s'en chargent.
???
Si vous voulez faire de la vérification de type, utilisez une nouvelle
propriété qui check les valeurs en entrée et retourne le bon type en
sortie.
mylistbox.My_Items.Add(new Mon_Type("toto"));
Si j'ai compris ce que tu veux dire, mylistbox est une instance d'une classe
dérivée de ListBox. Autrement dit, je dois créer une classe dérivée de
ListBox, avec un code du genre :
public new ObjectCollectionFille My_Items {
get { return (ObjectCollectionFille) Items; }
}
Donc, là, je n'ai rien compris !
Merci de m'avoir répondu, mais je crains de ne pas avoir tout saisi :
Je pense que vous fourvoyez.
A quel sujet ?
"Une bête string" est bien moins générique qu'un objet qui peut contenir
un
graphe d'objet cyclique ou une référence sur un objet distant. Si la sérialisation (objet->chaîne de caractère) était si évidente, on se demanderait bien pourquoi il y a autant de sérialisations différents et
que
personne ne veuillent les faire et donc que les framework s'en chargent.
???
Si vous voulez faire de la vérification de type, utilisez une nouvelle propriété qui check les valeurs en entrée et retourne le bon type en
sortie.
mylistbox.My_Items.Add(new Mon_Type("toto"));
Si j'ai compris ce que tu veux dire, mylistbox est une instance d'une classe dérivée de ListBox. Autrement dit, je dois créer une classe dérivée de ListBox, avec un code du genre :
public new ObjectCollectionFille My_Items { get { return (ObjectCollectionFille) Items; } } Donc, là, je n'ai rien compris !
Merci de m'éclairer un peu :-(
Paul Bacelar
Je ne suis pas clair en effet car j'ai du mal à savoir où est ton problème.
ListBox est une classe concrète qui à un mode de fonctionnement assez rigide.
Pouvez-vous nous décrire le problème au quel la solution de la personnalisation de la collection d'objet répond.
J'ai du mal à savoir si c'est la collection ou les objets de la collection qu'il faut personnaliser. -- Paul Bacelar Demandeur d'emploi
"Boris Sargos" wrote in message news:
Merci de m'avoir répondu, mais je crains de ne pas avoir tout saisi :
> Je pense que vous fourvoyez. A quel sujet ?
> "Une bête string" est bien moins générique qu'un objet qui peut contenir un > graphe d'objet cyclique ou une référence sur un objet distant. Si la > sérialisation (objet->chaîne de caractère) était si évidente, on se > demanderait bien pourquoi il y a autant de sérialisations différents et que > personne ne veuillent les faire et donc que les framework s'en chargent. ???
> Si vous voulez faire de la vérification de type, utilisez une nouvelle > propriété qui check les valeurs en entrée et retourne le bon type en sortie. > mylistbox.My_Items.Add(new Mon_Type("toto")); Si j'ai compris ce que tu veux dire, mylistbox est une instance d'une
classe
dérivée de ListBox. Autrement dit, je dois créer une classe dérivée de ListBox, avec un code du genre :
public new ObjectCollectionFille My_Items { get { return (ObjectCollectionFille) Items; } } Donc, là, je n'ai rien compris !
Merci de m'éclairer un peu :-(
Je ne suis pas clair en effet car j'ai du mal à savoir où est ton problème.
ListBox est une classe concrète qui à un mode de fonctionnement assez
rigide.
Pouvez-vous nous décrire le problème au quel la solution de la
personnalisation de la collection d'objet répond.
J'ai du mal à savoir si c'est la collection ou les objets de la collection
qu'il faut personnaliser.
--
Paul Bacelar
Demandeur d'emploi
"Boris Sargos" <bsargos@wanadoo.fr> wrote in message
news:e3utPSlmEHA.3896@TK2MSFTNGP15.phx.gbl...
Merci de m'avoir répondu, mais je crains de ne pas avoir tout saisi :
> Je pense que vous fourvoyez.
A quel sujet ?
> "Une bête string" est bien moins générique qu'un objet qui peut contenir
un
> graphe d'objet cyclique ou une référence sur un objet distant. Si la
> sérialisation (objet->chaîne de caractère) était si évidente, on se
> demanderait bien pourquoi il y a autant de sérialisations différents et
que
> personne ne veuillent les faire et donc que les framework s'en chargent.
???
> Si vous voulez faire de la vérification de type, utilisez une nouvelle
> propriété qui check les valeurs en entrée et retourne le bon type en
sortie.
> mylistbox.My_Items.Add(new Mon_Type("toto"));
Si j'ai compris ce que tu veux dire, mylistbox est une instance d'une
classe
dérivée de ListBox. Autrement dit, je dois créer une classe dérivée de
ListBox, avec un code du genre :
public new ObjectCollectionFille My_Items {
get { return (ObjectCollectionFille) Items; }
}
Donc, là, je n'ai rien compris !
Je ne suis pas clair en effet car j'ai du mal à savoir où est ton problème.
ListBox est une classe concrète qui à un mode de fonctionnement assez rigide.
Pouvez-vous nous décrire le problème au quel la solution de la personnalisation de la collection d'objet répond.
J'ai du mal à savoir si c'est la collection ou les objets de la collection qu'il faut personnaliser. -- Paul Bacelar Demandeur d'emploi
"Boris Sargos" wrote in message news:
Merci de m'avoir répondu, mais je crains de ne pas avoir tout saisi :
> Je pense que vous fourvoyez. A quel sujet ?
> "Une bête string" est bien moins générique qu'un objet qui peut contenir un > graphe d'objet cyclique ou une référence sur un objet distant. Si la > sérialisation (objet->chaîne de caractère) était si évidente, on se > demanderait bien pourquoi il y a autant de sérialisations différents et que > personne ne veuillent les faire et donc que les framework s'en chargent. ???
> Si vous voulez faire de la vérification de type, utilisez une nouvelle > propriété qui check les valeurs en entrée et retourne le bon type en sortie. > mylistbox.My_Items.Add(new Mon_Type("toto")); Si j'ai compris ce que tu veux dire, mylistbox est une instance d'une
classe
dérivée de ListBox. Autrement dit, je dois créer une classe dérivée de ListBox, avec un code du genre :
public new ObjectCollectionFille My_Items { get { return (ObjectCollectionFille) Items; } } Donc, là, je n'ai rien compris !
Merci de m'éclairer un peu :-(
Boris Sargos
D'accord, voici mon problème. Il n'est pas très grave, puisque je peux le contourner. Mais ça alimente la conversation ...
Alors voilà. En fait, à chaque ListBox est associée une collection de type ObjectCollection. Cette collection stocke des objets de type object, ce qui est on ne peut plus générique.
Hors, justement, j'ai créé un contrôle MyListControl (qui contient un ListBox) qui ne stocke qu'un type d'objet : MyItem. Pour que mon code soit élégant, j'aurais souhaité que la propriété Items de MyListControl retourne une collection d'objets déjà castés MyItem. L'idée était donc tout simplement de dériver ObjectCollection en MyItemCollection pour pouvoir écrire un code avec des déclarations proches de :
MyItemCollection MyListControl.Items { } // Au lieu de ObjectCollection MyListControl.Items {} MyItem MyListControl.Items[int]; // Au mieu de object MyListControl.Items[int];
Tu trouveras peut-être que l'intérêt d'une telle chose est limité. Et tu auras raison. Si je n'ai pas été clair, cela n'est pas grave, on laissera tomber !
Voilà. Merci.
D'accord, voici mon problème. Il n'est pas très grave, puisque je peux le
contourner. Mais ça alimente la conversation ...
Alors voilà.
En fait, à chaque ListBox est associée une collection de type
ObjectCollection. Cette collection stocke des objets de type object, ce qui
est on ne peut plus générique.
Hors, justement, j'ai créé un contrôle MyListControl (qui contient un
ListBox) qui ne stocke qu'un type d'objet : MyItem. Pour que mon code soit
élégant, j'aurais souhaité que la propriété Items de MyListControl retourne
une collection d'objets déjà castés MyItem. L'idée était donc tout
simplement de dériver ObjectCollection en MyItemCollection pour pouvoir
écrire un code avec des déclarations proches de :
MyItemCollection MyListControl.Items { } //
Au lieu de ObjectCollection MyListControl.Items {}
MyItem MyListControl.Items[int];
// Au mieu de object MyListControl.Items[int];
Tu trouveras peut-être que l'intérêt d'une telle chose est limité. Et tu
auras raison. Si je n'ai pas été clair, cela n'est pas grave, on laissera
tomber !
D'accord, voici mon problème. Il n'est pas très grave, puisque je peux le contourner. Mais ça alimente la conversation ...
Alors voilà. En fait, à chaque ListBox est associée une collection de type ObjectCollection. Cette collection stocke des objets de type object, ce qui est on ne peut plus générique.
Hors, justement, j'ai créé un contrôle MyListControl (qui contient un ListBox) qui ne stocke qu'un type d'objet : MyItem. Pour que mon code soit élégant, j'aurais souhaité que la propriété Items de MyListControl retourne une collection d'objets déjà castés MyItem. L'idée était donc tout simplement de dériver ObjectCollection en MyItemCollection pour pouvoir écrire un code avec des déclarations proches de :
MyItemCollection MyListControl.Items { } // Au lieu de ObjectCollection MyListControl.Items {} MyItem MyListControl.Items[int]; // Au mieu de object MyListControl.Items[int];
Tu trouveras peut-être que l'intérêt d'une telle chose est limité. Et tu auras raison. Si je n'ai pas été clair, cela n'est pas grave, on laissera tomber !