关于页面加载时代码生成的按钮与设计视图中手动添加按钮的大问题。
您不能手动添加 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 且工具提示=1A 的按钮。我会浏览所有工具提示(1A,...10N)并检查每个按钮(考虑到它们具有独特的工具提示),并每次检查颜色。对于每种红色,我数一个按钮。
它们都被称为"btn"是一个问题吗?现在,我可以通过工具提示来区分它们:1A,1B,...10N,正如我所说。多谢。
编辑>>>>>>>我尝试了Ben的建议,现在的问题是,当我单击其中任何一个按钮时,所有按钮都会消失。谢谢你的耐心等待。
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;
}
}
你在这里问几个不同的问题。
您可以创建动态按钮(或任何其他控件),但为了使它们与页面生命周期、事件和视图状态保持同步,您需要在页面生命周期的初始化阶段创建它们(我无法从您的代码中理解这是否是您正在做的事情)
您将变量称为"btn",但这不是 ASP.NET 中标识控件的方式。它们中的每一个都有一个 ID(和一个唯一 ID),这些 ID 应该是唯一的。如果将相同的事件处理程序附加到按钮,则无需在事件处理程序中找到触发按钮,它是作为事件处理 mehotds 的一部分接收的发送方对象。
我强烈建议您阅读此 msdn 页面,其中解释了您询问的所有内容。
您需要做的就是在每个 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_++;
}
为 ASP.NET 控件提供相同的 ID 不会获取所需的结果。如果更改按钮的颜色是唯一的要求,我强烈建议使用 JQuery,原因如下:
- 易于实现,因为它将在客户端运行,所以速度非常快
- 通过使用适当的选择器,可以轻松获取点击按钮的计数(您可以使用按钮的任何属性,例如ID,CSSClass甚至按钮的名称。
我的建议:
- 在 JQuery 中,在文档加载时添加具有不同 ID 但名称相同的输入(类型=按钮)(例如"btn")。
- 在 JQuery 中编写另一个事件,该事件将监听所有名称为"btn"的按钮的按钮单击。在该函数中,使用 Style 属性更改按钮的颜色。
- 最后,如果你想找到有多少个按钮是红色的,也可以通过使用JQuery,使用适当的样式选择器来实现 。