关于页面加载时代码生成按钮的大问题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”的按钮控件,但是我如何找到“具有特定属性的按钮,例如找到名为btn的按钮,其中tooltip = 1A。我将通过所有工具提示(1A,... 10N)并检查每个按钮(考虑到它们具有独特的工具提示),并且每次都检查颜色。对于每种红色,我都会计算一个按钮。
它是一个问题是它们都被称为“btn”吗?现在我可以通过工具提示区分它们:1A,1B,... 10N,正如我所说。非常感谢。
修改&GT;&GT;&GT;&GT;&GT;&GT;&GT;我尝试了Ben的建议,现在的问题是当我点击任何按钮时所有按钮都会消失。感谢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 :(得分:1)
你在这里问几个不同的问题。
您可以创建动态按钮(或任何其他控件),但为了使它们与页面生命周期,事件和视图状态保持同步,您需要在页面生命周期的初始化阶段创建它们(我无法理解你的代码,如果这是你正在做的事情)
您调用了变量“btn”,但这不是如何在ASP.NET中识别控件。它们中的每一个都有一个ID(和一个UniqueID),这些ID应该是唯一的。如果将相同的事件处理程序附加到按钮,则不需要在事件处理程序中找到触发按钮,它是作为事件处理mehotd的一部分而接收的发送方对象。
我强烈建议您阅读this msdn page,其中解释了您询问的所有内容。
答案 1 :(得分:0)
您需要做的就是在每个Button.Click上挂钩一个事件处理程序。这将使Sender成为Button,因此您可以将其转换为Button,将其颜色设置为Red。并且在相同的方法中,您将增加一些局部字段以增加红色按钮的数量。
像这样的伪代码:
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_++;
}
答案 2 :(得分:0)
为ASP.NET控件提供相同的ID将无法获取所需的结果。如果更改按钮的颜色是唯一的要求,我强烈建议使用JQuery,原因如下:
我的建议: