关于页面加载时代码生成的按钮与设计视图中手动添加的按钮的大问题。
您不能手动添加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的按钮。,我将遍历所有工具提示(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;
}
}发布于 2012-06-15 18:30:08
你问了几个不同的问题。
您可以创建动态按钮(或任何其他控件),但是为了使它们与页面生命周期、事件和视图状态保持同步,您需要在页面生命周期的初始化阶段创建它们(我无法从代码中理解这是否是您要做的)
您调用变量"btn",但这不是在ASP.NET中标识控件的方法,每个控件都有一个ID (和一个UniqueID),这些ID应该是唯一的。如果将相同的事件处理程序附加到您的按钮上,则不需要在事件处理程序中找到触发按钮,而是作为处理mehotds事件的一部分接收到的发送方对象。
我强烈建议您阅读此msdn页面,它解释了您询问的所有内容。
发布于 2012-06-15 18:29:31
您所需要做的就是在每个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_++;
}发布于 2012-06-15 18:53:59
向ASP.NET控件提供相同的ID将不会获取所需的结果。如果更改按钮的颜色是唯一的要求,我强烈主张使用JQuery,原因如下:
我的建议是:
https://stackoverflow.com/questions/11056173
复制相似问题