Hi!!!
Ich schreib gerade an einem Programm wo ich ein LabelArray und ein ButtonArray habe. Die Buttons und die Label sind an genau der selben Stelle und gleich groß. Die Label haben alle Visible = false.
So, wenn ich jetzt auf einen Button klicke, will ich das der Button Visible = flase und der Label Visible = true wird, aber wie bekomm ich ein Klickevent für einen Button aus einem Array?
lg
Dragon
wie wäre der fogende Code
//zum registrieren
private void Init(){
foreach (Button but in buttonArray){
but.Click += new EventHandler(CmdOnClick)
}
}
private void CmdOnClick(Object obj, EventArgs e){
int i = 0;
foreach(Button but in buttonArray){
if (but == ((Button)obj){
labelArray[i].Visible = true;
but.Visible = false;
}
i++;
}
}
oder mit einer for schleife
mfg
such mal nach Delegat da müsstest du das passende finden
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
wäre das an dieser stelle nicht zu aufwendig mit delegat?
Hallo S.H.-Teichhof,
delegat ist in diesem Zusammenhang m.E. ein viel zu allgemeines Stichwort und überflüssig ist es auch, weil ja schon sehr gut verwendbarer Code gepostet wurde.
herbivore
Ich würde das Tag des Buttons verwenden um darin das Label zu speichern und umgekehrt...
private void Form1_Load(object sender, System.EventArgs e)
{
int intY=0;
//erstelle 10 Buttons und Labels
for (int i=0;i<10;i++)
{
Label lbl=new Label();
Button btn=new Button();
//Im Tag legst Du das Partner-Control ab
lbl.Tag=btn;
btn.Tag=lbl;
//Label unsichtbar
lbl.Visible=false;
//Text auf Button festlegen
btn.Text=string.Format("Text {0}",i.ToString());
//Text des Buttons auf Label übernehmen
lbl.Text=btn.Text;
//Position festlegen
lbl.Location=new Point(0,intY);
btn.Location=lbl.Location;
//EventHandlers registrieren
lbl.Click+=new EventHandler(ctrl_Click);
btn.Click+=new EventHandler(ctrl_Click);
//Controls auf Form pappen
this.Controls.Add(lbl);
this.Controls.Add(btn);
//Offset erhöhen
intY+=btn.Height;
}
}
private void ctrl_Click(object sender, EventArgs e)
{
//was wurde geklickt
Control clickedControl=(Control)sender;
//Partner davon
Control partnerControl=(Control)clickedControl.Tag;
//Darstellung switchen
clickedControl.Visible=!clickedControl.Visible;
partnerControl.Visible=!clickedControl.Visible;
}
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...