Laden...

SharpDevelop soll korrekten Code beim Hinzufügen von Controls in eigene Collection generieren

Erstellt von Lost-Ha(n)f-PHP vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.433 Views
Lost-Ha(n)f-PHP Themenstarter:in
58 Beiträge seit 2007
vor 13 Jahren
SharpDevelop soll korrekten Code beim Hinzufügen von Controls in eigene Collection generieren

Hallo Community,

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:1.Kann sich jemand erklären, warum das Programm diese Einträge erstellt? 1.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.

Mit freundlichem Gruß

Lost-Ha[n]f-PHP

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Lost-Ha(n)f-PHP,

schau dir mal mit dem Reflector an, wie das bei TabControl gemacht ist. Dort gibt es ja auch zwei Properties um dieselbe Collection anzusprechen: TabControl.Controls und TabControl.TabPages.

herbivore

328 Beiträge seit 2006
vor 13 Jahren

Schau dir ebenfalls mal die ObservableCollection<T>-Klasse an

Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck

Lost-Ha(n)f-PHP Themenstarter:in
58 Beiträge seit 2007
vor 13 Jahren

Danke für eure Hilfe. Damit kann ich arbeiten!

Mit freundlichem Gruß

Lost-Ha[n]f-PHP