none
在c#中如何给动态创建的Button添加事件 RRS feed

  • 问题

  • 在c#中如何给动态创建的Button添加事件!
    Button是不确定个数的!怎样给他们都添加事件(点击他们得到他们各自的Text值).
    下面是我写的代码(我的意思是:读取数据库的图书类别,数据库你有多少中类型,就创建几个Button,点击Button分别查询他们相应类型的书)
    我是C#初学者! 希望得到大虾们的帮助!
    1         string[] name;  
    2         int a;  
    3         private void Form8_Load(object sender, EventArgs e)  
    4         {  
    5             // TODO: 这行代码将数据加载到表“图书信息DataSet3.图书表”中。您可以根据需要移动或移除它。  
    6             this.图书表TableAdapter.Fill(this.图书信息DataSet3.图书表);  
    7             SqlConnection conn = new SqlConnection("server=.;database='图书信息';uid=sa;pwd=ljguo;");  
    8             SqlDataAdapter comm = new SqlDataAdapter("select distinct 图书类别 from [图书表] ", conn);  
    9             DataSet ds = new DataSet();  
    10             ds.Clear();  
    11             comm.Fill(ds, "图书表");  
    12  
    13             this.dataGridView1.DataSource = ds.Tables["图书表"];  
    14             a = dataGridView1.RowCount - 1;  
    15             chuanjian();  
    16  
    17         }  
    18           
    19         public void chuanjian()  
    20         {  
    21             name = new string[a];  
    22              
    23             for (int i = 0; i < a; i++)  
    24             {  
    25  
    26                 Button bt = new Button();  
    27                 bt.Name = "Button"+i.ToString();  
    28                 bt.Margin = new System.Windows.Forms.Padding(20);  
    29

                    bt.Click += new System.EventHandler(this.button1_Click);//这里只有创建一个事件 (我的原意分别

     把他们各自的值传给f9) 

    30                 bt.Text = dataGridView1.Rows[i].Cells[2].Value.ToString() ;  
    31                 this.Controls.Add(bt);  
    32                 name[i] = bt.Text;  
    33                 this.flowLayoutPanel1.Controls.Add(bt);  
    34               
    35  
    36             }  
           Form9 f9 = new Form9();
            private void button1_Click(object sender, EventArgs e)
            {
               
               
                f9.Name = name[1];
                f9.ShowDialog();
            }
    37         } 

    警報.警報................
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月13日 19:24 Windows表单类库问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月11日 3:27

答案

  •    private void button1_Click(object sender, EventArgs e)

    这个sender 就是相应的button

    ((button)sender).text 就是里面的文本


    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已建议为答案 王的强 2009年3月11日 8:41
    • 已标记为答案 廖建国 2009年3月11日 14:21
    2009年3月11日 4:08
    版主
  • 你好!
         刚才写了一个实例,希望对你有帮助:
      public Form1()
            {
                InitializeComponent();           
                button1.Click += new EventHandler(button_Click);
                button2.Click += new EventHandler(button_Click);
                button3.Click += new EventHandler(button_Click);
               
            }

            private void button_Click(object sender, EventArgs e)
            {
                Button tempButton = sender as Button;
                if (tempButton != null)
                    MessageBox.Show(tempButton.Text);
            }


    周雪峰
    • 已标记为答案 廖建国 2009年3月11日 14:21
    2009年3月11日 10:45
    版主

全部回复

  •    private void button1_Click(object sender, EventArgs e)

    这个sender 就是相应的button

    ((button)sender).text 就是里面的文本


    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已建议为答案 王的强 2009年3月11日 8:41
    • 已标记为答案 廖建国 2009年3月11日 14:21
    2009年3月11日 4:08
    版主
  • 你好!
         刚才写了一个实例,希望对你有帮助:
      public Form1()
            {
                InitializeComponent();           
                button1.Click += new EventHandler(button_Click);
                button2.Click += new EventHandler(button_Click);
                button3.Click += new EventHandler(button_Click);
               
            }

            private void button_Click(object sender, EventArgs e)
            {
                Button tempButton = sender as Button;
                if (tempButton != null)
                    MessageBox.Show(tempButton.Text);
            }


    周雪峰
    • 已标记为答案 廖建国 2009年3月11日 14:21
    2009年3月11日 10:45
    版主