2008-08-26 20 views
4

Dans notre projet, SharpWired, nous essayons de créer un composant de téléchargement similaire aux fenêtres de téléchargement dans Firefox ou Safari. C'est-à-dire, une seule liste descendante de téléchargements qui sont des contrôles personnalisés contenant des barres de progression, des boutons et autres.Liste dynamique descendante des contrôles dans WindowsForms et C#?

Les exigences sont qu'il devrait y avoir une seule liste, avec un élément sur chaque ligne. Chaque élément doit être un contrôle personnalisé. La liste entière doit être redimensionnable dynamiquement, de sorte que lorsque vous la faites plus longue/plus courte, la liste ajoute une barre de défilement lorsque vous en avez besoin et lorsque vous la réduisez ou agrandissez, les contrôles personnalisés doivent être redimensionnés à la largeur de la liste.

Nous avons essayé d'utiliser un FlowLayoutPanel mais nous n'avons pas obtenu le redimensionnement pour fonctionner comme nous le souhaitons. De préférence, nous ne devrions avoir à définir l'ancrage des contrôles personnalisés à gauche & droite. Nous avons également pensé à utiliser un TableLayoutPanel, mais nous avons trouvé que l'ajout dynamique de lignes était trop lourd à ce jour.

Cela doit être un cas d'utilisation assez commun, et il me semble un peu étrange que le FlowLayoutPanel n'a aucune manière intuitive de le faire. Est-ce que quelqu'un a fait quelque chose de similaire ou a des trucs ou astuces pour nous mettre en route?

Cheers!
/Adam

Répondre

2

Si vous ne souhaitez pas utiliser la liaison de données (via la commande DataRepeater, comme mentionné ci-dessus), vous pouvez utiliser un Panel régulier de contrôle et définissez sa propriété AutoScroll true (pour activer les barres de défilement).

Ensuite, vous pouvez ajouter manuellement vos contrôles personnalisés et définir la propriété Dock de chacun d'entre eux sur Top.

+0

C'est ce que nous avons fait. La solution de liaison de données est trop lourde pour nous. –

1

.NET 3.5 SP1 a introduit un contrôle Windows Forms DataRepeater qui semble faire ce que vous voulez. Liez-le à la liste des "téléchargements" (ou à ce que votre liste représente) et personnalisez chaque panneau d'éléments pour inclure les contrôles dont vous avez besoin.

+0

Ce contrôle est dans VisualBasic Power Pack. Comment l'utiliser en C#? –

+0

@Adam non, c'est juste dans l'espace de noms VisualBasic. Vous pouvez l'utiliser à partir de n'importe quel langage .NET, et cela fait partie du framework à partir de .NET 3.5 SP1. –

+0

Pour autant que je sache, vous pouvez simplement référencer l'assemblage dans votre solution et utiliser les méthodes qu'il contient normalement. Les assemblages .Net compilés peuvent interagir les uns avec les autres de façon transparente. Bien sûr, je n'ai aucune expérience spécifique de cette assemblée, et je ne peux rien garantir de ce que je viens de dire dans ce cas. :) – ZombieSheep