我有一个逐行读取文件的程序,并将该字符串放在tableLayoutPanel中,但是如何为tableLayoutPanel中的每个标签创建一个eventHandler?
以下是我正在使用的代码:
Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);
每个标签都需要打开一个网页,网址必须是自己的文字。
我已经尝试过了:
foreach (Control x in panel1.Controls)
{
label.Click += HandleClick;
}
与
private void HandleClick(object sender, EventArgs e)
{
messageBox.Show("Hello World!");
}
它不起作用。
新问题:
Jay Walker解决了主要问题,但现在我遇到了另一个问题。并非所有标签都适用于eventHandler。这是主要代码:
string line;
System.IO.StreamReader file = new System.IO.StreamReader("research.dat");
while ((line = file.ReadLine()) != null)
{
Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
label.Click += HandleClick;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);
}
结合:
private void HandleClick(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.White;
}
某些标签背景更改为白色,而相同则不会。
答案 0 :(得分:2)
为什么不在创建标签时添加处理程序,而不是稍后通过控件循环(您可能应该引用x
而不是label
。
Label label = new Label();
label.Name = "MyNewLabel";
label.ForeColor = Color.Red;
label.Text = line;
// add the handler here
label.Click += HandleClick;
tableLayoutPanel1.RowCount++;
tableLayoutPanel1.RowStyles.Add(new RowStyle());
tableLayoutPanel1.Controls.Add(label, 0, tableLayoutPanel1.RowCount + 1);
答案 1 :(得分:0)
执行
label.Click += Eventhandler;
创建标签后
答案 2 :(得分:0)
如果你真的希望它在foreach循环中做:
foreach (Control c in panel1.Controls) {
if (c.Type == typeof(Label)) { //or something like that...
c.Click += HandleClick;
}
}