2012-06-15 62 views
0

页面加载时代码生成按钮的大问题VERSUS在设计视图中手动添加按钮。代码生成按钮

你不能手动添加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 

      } 

我不知道是否btn_Click(object sender, EventArgs e)作品,因为在我点击一个按钮全部消失。 我该如何解决这个问题?

最后,我需要计数有多少个按钮是红色的。我的下面的想法是否实用?我们知道如何找到名为“btn”的按钮控件,,但是如何找到“具有某个属性的按钮,例如找到带有tooltip = 1A的名为btn的按钮。我会浏览所有工具提示(1A ,. ... 10N),并检查每个按钮(考虑到他们有独特的工具提示),并检查每次的颜色,对于每个红色,我计算一个按钮。现在我可以通过提示区分它们:1A,1B,... 10N,正如我所说多谢

编辑 >>>>>>>我想本的建议,现在的问题是。当我点击其中的任何按钮时,所有的按钮消失。感谢yoru耐心。

public partial class Seatalloc2 : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       PopulateControls(); 
      } 
     } 

     protected void PopulateControls() 
     { 

      Panel1.Visible = true; 
      Button btn; 

      Panel2.Visible = true; 
      DropDownList nrbileteddl = Panel1.FindControl("nrBileteddl") as DropDownList; 
      nrbileteddl.Visible = true; 

      for (int i = 1; i <= 5; i++) 
      { 
       nrbileteddl.Items.Add(i + ""); 
      } 

      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; 
        btn.BackColor = Color.Green; 
        btn.Click += new EventHandler(btn_Click); 
        Panel2.Controls.Add(btn); 
       } 
       Panel2.Controls.Add(new LiteralControl("<br/>")); 
      } 
     } 

     protected void btn_Click(object sender, EventArgs e) 
     { 
      Button btn = sender as Button; 
      btn.BackColor = Color.Red; 
     } 
    } 

回答

0

您只需要在每个Button.Click上挂钩一个事件处理程序。这将使发件人成为按钮,因此您可以将其转换为按钮,将其颜色设置为红色。在同样的方法中,你会增加一些本地字段来增加红色按钮的数量。

伪代码:

 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_++; 
    } 
+0

谢谢本,我想你的意见,并会重新编辑我的问题。问题是,我点击一个按钮后,所有消失。为什么会这样呢? –

1

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

我强烈建议您阅读this msdn page,它解释了您询问的所有内容。

0

为ASP提供相同的ID。NET控件不会获取所需的结果。如果更改按钮的颜色是唯一的要求,我会强烈主张使用JQuery的原因如下:

  1. 容易实现,因为它会在客户端上运行,这将是非常快的
  2. 易通过使用适当的选择来获取点击按钮的次数(您可以使用该按钮,如ID,的CssClass甚至按钮的名称的任何财产

我的建议:

  1. 在在文档加载JQuery,添加输入(类型=按钮)具有不同的ID但名称相同(称为“btn”)。
  2. 在JQuery中编写另一个事件,它将听按钮点击名称为“btn”的所有按钮。在该功能中,使用Style属性更改按钮的颜色。
  3. 最后,如果你想找到多少个按钮是红色的,这也可以通过使用JQuery通过使用合适的选择了风格
+0

非常感谢DotNetFreak,听起来不错,但我不知道JQuery。我需要快速完成这项任务,所以我尝试使用我所知道的。不过我会确保在将来学习JQuery,它似乎很受欢迎。我希望现在可以使用数组吗? 'Button [] [] buttonArray = new Button [10] [14]; (int b = 1; b <= 14; b ++) { buttonArray [a] [b] = new Button();对于(int a = 1; a <= 10; a ++) }}。但我仍然不知道如何检查阵列中哪个按钮被点击了?我需要这种语法,所以我可以继续并着色它。 –

+0

您可以使用此链接[http://stackoverflow.com/questions/6123136/add-button-to-an-html-page-using-javascript]从javascript创建按钮。创建按钮时,请将for循环的'a'和'b'变量附加到按钮的Name元素。在每个按钮上,调用相同的JavaScript函数,它将执行以下操作:提取名称并标记另一个10X14二维数组,以便您可以确切知道哪个按钮被单击。 – DotNetFreak