【问题标题】:Button id as an event handler作为事件处理程序的按钮 ID
【发布时间】:2011-01-11 14:01:06
【问题描述】:

我正在动态创建 7 个按钮

当我创建按钮时,我试图拥有一个事件处理程序,而不是通过一个开关以一种方法处理所有点击。理想情况下,我想传递一个带有按钮的 id,该按钮指示点击了什么,这与

的解决方案相反
void pdfButton_Click(object sender, EventArgs e)
{
    Button b = (Button)sender;
    Console.WriteLine(b.Text);
}

因为使用此事件处理程序的所有按钮都具有相同的文本。我有一个与按钮关联的唯一 ID,但不知道如何发送它们

谢谢

【问题讨论】:

    标签: c# button webforms


    【解决方案1】:

    您可以使用NameTag 属性。

    【讨论】:

      【解决方案2】:

      在创建按钮时将 ID 放入按钮的 Tag 属性中,然后在事件处理程序中检查 ID。

      Button button = new Button();
      button.Tag = 1;
      
      ...
      
      void pdfButton_Click(object sender, EventArgs e)
      {
          Button b = (Button)sender;
          switch ((int)b.Tag)
          {
              ...
          }
      
      }
      

      【讨论】:

        【解决方案3】:

        第一:通过 switch 在一个事件中处理多次点击的错误做法。但解决方案是:

        创建您自己的控件,该控件继承按钮并将您的 ID 作为属性进行广告。因此您可以通过以下方式访问它:

        MyButton b = (MyButton)sender;
        
        switch(b.ID) { 
            //Code goes here 
        }
        

        【讨论】:

        • 问题是每个按钮都做同样的事情,它根据传递的值加载一个字节数组。如果您需要定制处理事件,这肯定是唯一不好的做法吗?
        【解决方案4】:

        如果你添加的每个按钮都有一个唯一的 ID,为什么不直接使用按钮的 ID 属性呢?

        Button button = new Button();
        button.ID= "Button1";
        
        //...
        
        void pdfButton_Click(object sender, EventArgs e)
        {
            Button b = (Button)sender;
            switch(button.ID)
            {
                case "Button1":
                  //...
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-15
          • 2012-08-17
          相关资源
          最近更新 更多