新问题:
之后
我有一个程序逐行读取文件,并把字符串在tableLayoutPanel,但我怎么能创建一个eventHandler在tableLayoutPanel中的每个标签?
下面是我使用的代码: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);
每个标签都需要打开一个网页,url必须是它自己的文本。
我已经试过了:
foreach (Control x in panel1.Controls)
{
label.Click += HandleClick;
}
private void HandleClick(object sender, EventArgs e)
{
messageBox.Show("Hello World!");
}
就是不行
新问题:
主要问题已经被Jay Walker解决了,但是现在我又有了一个问题。并不是所有的标签都能与eventandler一起工作。下面是主代码:
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;
}
一些标签背景会变成白色,而相同的则不会。
为什么不在创建标签时添加处理程序,而不是稍后通过循环遍历控件(您可能应该引用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);
做
label.Click += Eventhandler;
在创建标签
如果你真的想让它在foreach循环中执行:
foreach (Control c in panel1.Controls) {
if (c.Type == typeof(Label)) { //or something like that...
c.Click += HandleClick;
}
}