C # how to deal with events for several dynamic created buttons

I created WinForm and I added dynamic buttons to it, how can I handle events

public static void Notify() { var line = 3; Form fm = new Form(); fm.Text = "Hello!"; fm.ShowInTaskbar = false; fm.ShowIcon = false; fm.MinimizeBox = false; fm.MaximizeBox = false; fm.FormBorderStyle = FormBorderStyle.FixedToolWindow; fm.TopMost = true; fm.ClientSize = new Size(150, 75 * line/2); Rectangle workingArea = Screen.PrimaryScreen.WorkingArea; int left = workingArea.Width - fm.Width-5; int top = workingArea.Height - fm.Height-4; fm.Location = new Point(left, top); fm.StartPosition = FormStartPosition.Manual; var buttomArray = new Button[line]; for (int i = 0; i < line; i++) { buttomArray[i] = new Button(); buttomArray[i].Text = "Button " + (i + 1); buttomArray[i].Location = new Point(10,30*(i+1) - 16); buttomArray[i].Size = new Size(130,25); fm.Controls.AddRange(new Control[] { buttomArray[i] }); } fm.Show(); } 

I want to be able to do some different things when I click on another button (maybe I can use the "name" as an identifier?)

amuses

0
source share
2 answers

Just assign a Click handler:

 for (int i = 0; i < 10; i++) { var btn = new Button(); btn.Text = "Button " + i; btn.Location = new Point(10, 30 * (i + 1) - 16); btn.Click += (sender, args) => { // sender is the instance of the button that was clicked MessageBox.Show(((Button)sender).Text + " was clicked"); }; Controls.Add(btn); } 
+4
source

Sign up for the Button.Click event. Attach the data that you want to use in the click handler to the Tag property while you are in the creation loop.

 for (int i = 0; i < line; i++) { buttomArray[i] = new Button(); buttomArray[i].Tag=i; ..... 

The button will be the sender in the click handler (you can overlay it), and the tag will contain your value.

 Button btn=(Button)sender; int value=(int)btn.Tag; 

The property tag accepts any type. Therefore, you can attach any value to it.

+3
source

All Articles