FlowLayoutPanel - wie finde beim Event auslösen das richtige Control?

Asterix-Ac

Erfahrenes Mitglied
Hi Leute,

habe noch nie so richtig mit den Panels gearbeitet. Ich habe in einer Schleife immer das gleiche Control zum FlowLayoutPanel hinzugefügt. Habe vorher dem Control (eigenbau) ein Event hinzugefügt. Beim Auslösen soll es eine Mothode ausführen.
Aber wie finde ich heraus, welches der Controls angesprochen wurde?
Das FlowLayoutPanel hat ja keinen Index, eine ID oder sowas.
Ich kann ja mein Control verändern, dass es einen int-Wert aufnehmen kann, aber das ist ja nicht Sinn und Zweck der Übung. Ich kann ja keinen Button verändern, wenn ich den 20x einfügen möchte.

Bin ziemlich ratlos.

Asterix
 
Hi

Normalerweise sollte das Delegate, welches den Typ des Events definiert 2 Parameter haben:
1. sender : object --> Das Objekt, welches das Event wirft. In deinem Fall ein Panel
2. e : EventArgs --> Argumente speziell für dieses Event (Ableitung der Klasse auch möglich

Wie rufst du denn das Event auf? Bzw. wie ist das Delegate definiert?
 
Hallo Niggo,

hatte vergessen zu abonnieren...

Ich habe ein Control erstellt, dass eine PictureBox, eine CheckBox, ein Label und eine TextBox enthällt. Ich habe das Control PictureCheckBox genannt.
Thumbnail ist noch eine weitere Klasse. Der Name sagt ja alles.

Hier in meinem Form die Aufrufschleife, mit der ich das FlowLayoutPanel fülle:
Code:
int i = 0;
int j = 1;
foreach(string bild in FileList)
{
	this.flowLayoutPanel1.SuspendLayout();
	Thumbnail smallThumb = new Thumbnail();
	PictureCheckBox pcb = new PictureCheckBox();
	pcb.BorderStyle = BorderStyle.FixedSingle;
	pcb.AutoEllipsis = true;
	pcb.setThumbnail(bild);
	pcb.FileName = Path.GetFileName(bild);
	pcb.Controls["picBoxThumbImage"].Click += new System.EventHandler(this.PictureCheckBoxClick);
	pcb.Controls["lblFileName"].Click += new System.EventHandler(this.PictureCheckBoxClick);
	this.flowLayoutPanel1.Controls.Add(pcb);
	this.toolStripProgressBar1.Value = i;
	this.toolStripStatusLabel1.Text = "Bilder gelesen : "+j.ToString();
	Application.DoEvents();
	i++;
	j++;
	this.flowLayoutPanel1.ResumeLayout();
}
Application.DoEvents();
Für die PictureBox und das Label darunter habe ich ein Click-Event definiert. Beide Events sollen die gleiche Methode auslösen : PictureCheckBoxClick
sender gibt mir System.Windows Forms.PictureBox oder Label zurück und bei Label auch den Text.
EventArgs e : e gibt mir nur System.Windows.Forms.MouseEventArgs zurück.

Da ich das ganze mit einem Index laufen lasse, brauche ich den Index von den Control, das gerade geklickt wurde. Ich habe eine ArrayList mit den Pfaden der Bilder in der ArrayList stehen. Also muss das ganze parallel laufen. Aber ohne Index leider nicht.

Asterix
 
Zurück