2016-08-26 6 views
0

Ich habe ein Benutzersteuerelement namens Postbox erstellt, das eine öffentliche Liste von Benutzersteuerelementen enthält.C# Beim Hinzufügen eines Objekts zur Liste etwas tun

Hier ist mein Code:

using System; 
using System.Collections.Generic; 
using System.Collections; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace DocEngineManager 
{ 
    public partial class PostBox : UserControl 
    { 
     public PostBox() 
     { 
      InitializeComponent(); 
     } 

     public List<PostBoxPost> Posts = new List<PostBoxPost>(); 

    } 
} 

PostBoxPosts ist die Art der Benutzersteuerelement, das die Liste enthält.

Wenn ein Benutzer PostBoxPost zu der Posts Liste in einer eigenen Anwendung hinzufügt, möchte ich in der Klasse meines UserControl, die weiß, was hinzugefügt wurde, auslösen und Ereignis auslösen.

+2

Sie sollten erklären, was Sie versuchen, in einfacheren Begriffen zu erreichen. – Aybe

+0

Eine 'List ' auf diese Weise scheint nutzlos, weil 'PostBox' ein Steuerelement ist. Ein Steuerelement sollte zur Sammlung "Controls" des übergeordneten Elements hinzugefügt werden, um nützlich zu sein. * 1) * Was ist dein Ziel? * 2) * Benötigen Sie nur Laufzeitunterstützung oder benötigen Sie möglicherweise auch Design-Time-Unterstützung? –

+0

Ich brauche Entwurfszeit und Laufzeitunterstützung. Keine der folgenden Antworten hat bisher geholfen. Ich muss wissen, wann ein Steuerelement hinzugefügt wird und welches Steuerelement hinzugefügt wurde, damit ich es bearbeiten kann, während es hinzugefügt wird oder direkt nachdem es hinzugefügt wurde. –

Antwort

4

Eine einfache Liste stellt keine Ereignisse aus, etwas wie ObservableCollection kann für Sie arbeiten?

public partial class PostBox : UserControl 
{ 
    public ObservableCollection<PostBoxPost> Posts = new ObservableCollection<PostBoxPost>(); 

    public PostBox() 
    { 
     InitializeComponent(); 

     Posts.CollectionChanged += OnPostsCollectionChanged; 
    } 

    private void OnPostsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     if (e.NewItems != null && e.NewItems.Count != 0) 
     { 
      foreach (PostBoxPost postBoxPost in e.NewItems) 
      { 
       // Do custom work here? 
      } 
     } 
    } 
} 
+0

'ObservableCollection' ist irgendwie WPF-lehnend, eine' BindingList' ist die Winforms-Version. –

+0

Diese Methode funktionierte für mich. Ich konnte feststellen, dass das hinzugefügte Objekt bei der Sammlung geändert wurde, und mache PostBox zum übergeordneten Objekt, indem ich 'Posts.Last() eingib. Parent = true;'. –

Verwandte Themen