如何添加具有独立点击事件的按钮

时间:2016-04-06 13:34:43

标签: c# runtime

我想在运行时动态添加按钮和文本框 按钮反应不同。

newbutton1texbox1 , newbutton2 linked with textbox2`

相关联

现在任何按钮都会从第一个文本框打印到最后一个文本框 一个接一个。

还要考虑我有一个按钮1& textbox1已经在指南的表单上

这是我的代码:

        List<Button> buttons = new List<Button>();
        List<TextBox> textboxes = new List<TextBox>();

        int NumTextBox = 0;
        void click(object sender, EventArgs e)
        {

            MessageBox.Show(textboxes[NumTextBox].Text);
            NumTextBox++;
        }

        int x = 0;
        int y = 0;
        void AddClick(object sender, EventArgs e)
        {
                Button newButton = new Button();
                buttons.Add(newButton);
                newButton.Click += click;// 
               // newButton.Location.Y = button1.Location.Y + 20;
                newButton.Location = new Point(button1.Location.X, button1.Location.Y+25+x);
                x += 25;
                this.Controls.Add(newButton);   

                TextBox newTextBox = new TextBox();
                textboxes.Add(newTextBox);
               // newTextBox.Click += click;

                newTextBox.Location = new Point(textBox1.Location.X, textBox1.Location.Y+25+y);
                y += 25;
                this.Controls.Add(newTextBox);

        }

2 个答案:

答案 0 :(得分:0)

你可以拥有一个类似mybutton的类,它继承自button类,在这个新类中你可以拥有一个带有textbox类型的属性。就像下面的代码一样。在您想要实例化按钮的代码中,您可以使用list<mybutton>并将linkedTextbox属性设置为文本框。

public class myButton:Button
{
   ...
   public TextBox linkedTextBox{set;get;}
}

在你的代码中你应该写一些这样的东西:

list<myButton> buttons=new list<myButton>();
Textbox someTextBox=new TextBox();
buttons[0].linkedTextbox=someTextBox;

在您的活动中,您可以使用:

((myButton)sender).linkedTextBox.text="Some thing";

答案 1 :(得分:0)

谢谢大家,我关注了@Franck的回答。所以改变了什么

  

我删除了预先制作的button1&amp; textbox1并添加它们   以Form_load编程,以便我可以将它们添加到。{1}}中   Lists

验证屏幕截图:http://prntscr.com/aprqxz

<强> CODE:

        List<Button> buttons = new List<Button>();
        List<TextBox> textboxes = new List<TextBox>();

        Button button1 = new Button();
        TextBox textBox1 = new TextBox();

        int x = 0;
        int y = 0;

        void click(object sender, EventArgs e)
        {


            var txt =  textboxes[Convert.ToInt32(((Button)sender).Tag)].Text;
            MessageBox.Show(txt.ToString());

        }

        void AddClick(object sender, EventArgs e)
        {

                Button newButton = new Button();
                newButton.Click += click;
                newButton.Location = new Point(button1.Location.X, button1.Location.Y+25+x);
                x += 25;
                newButton.Tag = buttons.Count;

                this.Controls.Add(newButton);

                buttons.Add(newButton);             
                //
                TextBox newTextBox = new TextBox();
                newTextBox.Location = new Point(textBox1.Location.X, textBox1.Location.Y+25+y);
                y += 25;
                this.Controls.Add(newTextBox);

                textboxes.Add(newTextBox);

        }
        void MainFormLoad(object sender, EventArgs e)
        {
                button1.Click += click; 
                button1.Location = new Point(55, 48);

                button1.Tag = buttons.Count;

                this.Controls.Add(button1);

                buttons.Add(button1);               
                //
                textBox1.Location = new Point(137, 50);

                this.Controls.Add(textBox1);

                textboxes.Add(textBox1);
        }

编辑1:由于计数从0开始,我没有添加newButton.Tag = buttons.count+1;我只添加newButton.Tag = buttons.count;