Laden...

ArrayButton Klick

Letzter Beitrag vor 18 Jahren 6 Posts 2.001 Views
ArrayButton Klick

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...