C# 代码生成按钮

C# 代码生成按钮,c#,asp.net,visual-studio-2008,C#,Asp.net,Visual Studio 2008,关于页面加载时代码生成的按钮和设计视图中手动添加的按钮的大问题 您不能手动添加140个按钮,所以我更喜欢代码。 单击按钮时,所有按钮的行为都将类似(它们将改变颜色)。显然,我无法编写140个单击事件方法,那么如何使成为一个适用于所有人的通用事件呢 我想这样做: protected void btn_Click(object sender, EventArgs e) { Button btn1 = Panel2.FindControl("btn") as B

关于页面加载时代码生成的按钮和设计视图中手动添加的按钮的大问题

您不能手动添加140个按钮,所以我更喜欢代码。 单击按钮时,所有按钮的行为都将类似(它们将改变颜色)。显然,我无法编写140个单击事件方法,那么如何使成为一个适用于所有人的通用事件呢

我想这样做:

protected void btn_Click(object sender, EventArgs e)
        {
            Button btn1 = Panel2.FindControl("btn") as Button;
            btn1.BackColor = Color.Red;
         }
因为所有的按钮都称为btn

以下是我添加按钮的方式:

for (int a = 1; a <= 10; a++)
            {
                for (char b = 'A'; b <= 'N'; b++)
                {
                    btn = new Button();
                    btn.Text = "";
                    btn.Height = 20; btn.Width = 20;
                    btn.ToolTip = a + " " + b;
                    Panel2.Controls.Add(btn);
                }
                Panel2.Controls.Add(new LiteralControl("<br/>")); // this inserts a paragraph

            }

您只需在每个按钮上挂接一个事件处理程序即可。单击。这将使发送者成为按钮,因此您可以将其转换为按钮,并将其颜色设置为红色。在相同的方法中,您将增加一些局部字段以增加红色按钮的数量

伪代码如下:

       int red_ = 0;
    void Method()
    {
        for(int i=0; i< 100; i++)
        {

            Button btn = new Button();
            btn.Click += new EventHandler(btn_Click);
        }
    }

    void btn_Click(object sender, RoutedEventArgs e)
    {
        Button btn = sender as Button;
        // set btn to red
        red_++;
    }
int红色=0;
void方法()
{
对于(int i=0;i<100;i++)
{
按钮btn=新按钮();
btn.Click+=新建事件处理程序(btn\u Click);
}
}
无效btn_单击(对象发送者,路由目标e)
{
按钮btn=发送方为按钮;
//将btn设置为红色
红色++;
}

你在这里问了几个不同的问题。
您可以创建动态按钮(或任何其他控件),但为了使它们与页面生命周期、事件和视图状态保持同步,您需要在页面生命周期的初始化阶段创建它们(如果这是您正在做的,我无法从您的代码中理解)
您调用了变量“btn”,但ASP.NET中的控件不是这样标识的。它们每个都有一个ID(和一个唯一的ID),这些ID应该是唯一的。如果将相同的事件处理程序附加到按钮,则不需要在事件处理程序中找到触发按钮,而是作为事件处理mehotds的一部分接收的发送方对象


我强烈建议您阅读,它解释了您询问的所有问题。

为ASP.NET控件提供相同的ID将无法获得所需的结果。如果更改按钮的颜色是唯一的要求,我强烈建议使用JQuery,原因如下:

  • 易于实现,因为它将在客户端运行,所以速度非常快
  • 通过使用适当的选择器(您可以使用按钮的任何属性,例如ID、CSSClass甚至按钮名称),轻松获取已单击按钮的计数
  • 我的忠告是:

  • 在JQuery中,在文档加载时添加具有不同ID但名称相同(比如“btn”)的输入(类型=按钮)
  • 在JQuery中编写另一个事件,它将侦听所有名为“btn”的按钮的按钮单击。在该函数中,使用Style属性更改按钮的颜色
  • 最后,如果您希望找到有多少个按钮是红色的,也可以通过使用JQuery和适当的样式选择器来查找

  • 非常感谢DotNetFreak,听起来不错,但我不懂JQuery。我需要快速完成这项任务,所以我会尝试使用我所知道的。我会确保将来学习JQuery,它看起来非常流行。我希望现在使用数组可以吗?
    按钮[][][]按钮数组=新按钮[10][14];for(int a=1;a)您可以使用此链接[要从javascript创建按钮。在创建按钮时,请将for循环的'a'和'b'变量附加到按钮的Name元素。在每个按钮上,调用相同的javascript函数,该函数将执行以下操作:提取名称并标记另一个10X14二维数组,以便您可以准确知道单击的是哪个按钮d、 谢谢你,本,我尝试了你的建议,并将重新编辑我的问题。问题是,当我点击一个按钮后,所有的东西都消失了。为什么会这样?
    
           int red_ = 0;
        void Method()
        {
            for(int i=0; i< 100; i++)
            {
    
                Button btn = new Button();
                btn.Click += new EventHandler(btn_Click);
            }
        }
    
        void btn_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            // set btn to red
            red_++;
        }