2010-09-30 13 views
1

Je crée un client Twitter en C#. Je veux mettre chaque tweet comme un élément d'une liste. J'ai créé un formulaire Windows qui représente un tweet (il a une image et des étiquettes).Ajout d'un objet formulaire Windows à la liste

Mon problème est que quand je ne peux pas voir les tweets quand je les ajoute à la liste. Après avoir ajouté 3 tweets (fenêtres forment des objets), la liste contient 3 éléments vides, mais je ne vois rien de tout cela.

Comment puis-je ajouter un objet formulaire Windows à une zone de liste?

(ces formes fonctionnent très bien, parce que je peux les voir si j'utilise la méthode ShowDialog)

s'il vous plaît aider

+0

Avez-vous considéré les implications de performance d'ajouter un formulaire Windows à une liste, un couple devrait être trouvé mais je peux voir une longue liste (Twitter montre généralement plus de 15 tweets à la fois) ralentir les applications elle-même. Je demande comme j'ai ajouté 49 boutons à un Windows Form et les résultats n'étaient pas jolis, je suis content de l'avoir testé avant de prendre une décision. –

+0

Nevermind! Je n'avais pas réalisé que ce n'était pas possible de toute façon. En plus d'adopter une approche WPF, vous devriez envisager de créer votre propre contrôle personnalisé. –

+0

Avez-vous trouvé l'une de ces réponses utile? Si oui, pouvez-vous en marquer un comme réponse? Si non, pouvez-vous poster votre propre réponse avec la façon dont vous l'avez résolu et la marquer comme la bonne réponse? Merci! –

Répondre

2

Vous pouvez ajouter un objet Form à la collection ListBox.Items, mais la seule chose que vous verrez est le nom de type du formulaire. ListBox n'est pas capable de rendre les contrôles comme éléments.

La solution efficace consiste à implémenter l'événement ListBox.DrawItem et à dessiner le tweet personnalisé. Il existe un bon exemple d'un tel gestionnaire d'événements dans la documentation MSDN Library de l'événement.

La solution lente consiste à ajouter des contrôles à la propriété Collection d'un Panel dont la propriété AutoScroll est définie sur true. Cela ne peut pas être une forme, il doit s'agir d'un UserControl.

+0

Cela semble la façon dont je voudrais le faire, cependant, je ne peux pas vraiment savoir exactement comment.mon GUI ressemble à ceci: –

+0

GUI publique (TwitterControl TwitterControl) { InitializeComponent(); Liste _list = nouvelle Liste (); OneTweet premier = nouveau OneTweet ("Zoli", "Ceci est mon premier tweet", DateTime.Now); OneTweet seconde = nouveau OneTweet ("Niiki", "Ceci est mon deuxième tweet", DateTime.Now); OneTweet third = nouveau OneTweet ("Eme", "Ceci est mon troisième tweet", DateTime.Now); _list.Add (premier); _list.Add (second); _list.Add (troisième); _tweetList.DataSource = _list; } –

+0

et oneTweet ressemble à ceci: public partial class OneTweet: Formulaire { OneTweet public (auteur chaîne, string message, DateTime POSTDATE) { InitializeComponent(); _authorName.Text = auteur; _message.Text = message; _postDate.Text = postDate.ToString(); } } –

1

Je ne pense pas ListBox peut afficher quoi que ce soit, mais une chaîne de texte pour chaque élément, donc vous ne serez pas en mesure de voir une image de chaque formulaire si c'est ce que vous espériez. Vous pouvez essayer d'utiliser FlowLayoutPanel à la place pour gérer une liste de contrôles.

2

Vous voudrez peut-être envisager de l'implémenter à l'aide de WPF. Où vous pouvez mettre quelque chose à l'intérieur d'une liste.

2

Quelques réflexions:

  1. Vous feriez mieux de travailler avec des contrôles personnalisés, plutôt qu'une forme toute
  2. Une zone de liste ne peut pas avoir des contrôles sur elle ... envisager une ListView: http://www.codeproject.com/KB/list/ListViewEmbeddedControls.aspx
  3. quelques exemples de code de ce que vous essayez nous aider à faire un zoom sur ce que vous faites

HTH, James