ich habe folgende Collection geschrieben:
public class ObservedList<T> : Collection<T> {
public delegate void CollectionItemHandler(object sender, T item);
public event CollectionItemHandler ItemAdded;
public event CollectionItemHandler ItemRemoved;
public event CollectionItemHandler ItemSet;
public ObservedList() {
}
public void AddRange(T[] items) {
foreach(T item in items) {
Add(item);
}
}
protected override void ClearItems() {
base.ClearItems();
}
protected override void InsertItem(int index, T item) {
base.InsertItem(index, item);
RaiseItemAdded(item);
}
protected override void RemoveItem(int index) {
RaiseItemRemoved(base[index]);
base.RemoveItem(index);
}
protected override void SetItem(int index, T item) {
base.SetItem(index, item);
RaiseItemSet(item);
}
protected void RaiseItemAdded(T item) {
if(ItemAdded != null) {
ItemAdded(this, item);
}
}
protected void RaiseItemRemoved(T item) {
if(ItemRemoved != null) {
ItemRemoved(this, item);
}
}
protected void RaiseItemSet(T item) {
if(ItemSet != null) {
ItemSet(this, item);
}
}
}
Diese Collection befindet sich in einem Control und ist dort als Property unter 'Items' veröffentlicht. Nun habe ich folgendes Problem. Wenn ich in der Entwicklungsumgebung im Eigenschaftenfenster auf 'Items' klicke, kann ich wie vorgesehen auch Einträge einrichten.
Leider ist der dynamisch generierte Code nicht korrekt.
Das Resultat bei zwei Einträgen ist:
this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox1);
this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox2);
new KBremote_intern.ObservedList<KBremote_intern.CollapseGroupBox>().AddRange(new KBremote_intern.CollapseGroupBox[] {
this.collapseGroupBox1,
this.collapseGroupBox2});
In Zeile 3 wird eine neue Collection angelegt, allerdings nicht this.collapseBoxContainer1.Items zugewiesen. Wenn ich alle drei Zeilen zu folgendem ändere, passt alles:
//this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox1);
//this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox2);
this.collapseBoxContainer1.Items.AddRange(new KBremote_intern.CollapseGroupBox[] {
this.collapseGroupBox1,
this.collapseGroupBox2});
Allerdings werde ich nicht im dynamischen Code rumfingern.
Meine Frage ist nun:
- Kann sich jemand erklären, warum das Programm diese Einträge erstellt?
- Wie muss eine Collection aussehen, damit das Programm das richtig anlegt?
(Es steht zwar links an der Seite aber ich benutze SharpDevelop (3.2.0:5505))
Ich danke euch für alle Anregungen.