Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

SharpDevelop soll korrekten Code beim Hinzufügen von Controls in eigene Collection generieren
Lost-Ha(n)f-PHP
myCSharp.de - Member

Avatar #avatar-2265.jpg


Dabei seit:
Beiträge: 58

Themenstarter:

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

beantworten | zitieren | melden

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?
  2. 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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
TripleX
myCSharp.de - Member

Avatar #avatar-3071.jpg


Dabei seit:
Beiträge: 328
Herkunft: Nürtingen

beantworten | zitieren | melden

Schau dir ebenfalls mal die ObservableCollection<T>-Klasse an
Träume nicht dein Leben sondern lebe deinen Traum.
Viele Grüße, David Teck
private Nachricht | Beiträge des Benutzers
Lost-Ha(n)f-PHP
myCSharp.de - Member

Avatar #avatar-2265.jpg


Dabei seit:
Beiträge: 58

Themenstarter:

beantworten | zitieren | melden

Danke für eure Hilfe. Damit kann ich arbeiten!
Mit freundlichem Gruß

Lost-Ha[n]f-PHP
private Nachricht | Beiträge des Benutzers