2013-03-03 68 views
2

我有一个程序逐行读取文件,并将该字符串放在tableLayoutPanel中,但是如何为tableLayoutPanel中的每个标签创建一个eventHandler?C#自动生成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); 

每个标签,需要打开一个网页,并链接必须是它自己的文字。

我已经尝试过这样的:

private void HandleClick(object sender, EventArgs e) 
{ 
messageBox.Show("Hello World!"); 
} 

这是行不通的。


新的问题:

主要问题是由杰伊·沃克解决了,但现在我有另一个问题。并非所有的标签都可以使用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

您要添加的标签'tableLayoutPanel1',但是,你是循环'PANEL1 '控件(并且分配给'label'而不是'x',但是在下面的答案中被评论过)......是吗? – Jcl 2013-03-03 16:49:28

+0

你能否详细说明一下“一些标签背景变成了白色,而**相同的**则没有”。 ** **是什么? – 2013-03-04 00:00:24

回答

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); 
0

执行

label.Click += Eventhandler; 

您创建的标签后

0

在这个循环中。

foreach (Control x in panel1.Controls) 
{ 
    label.Click += HandleClick; 
} 

您在每次迭代时将处理程序分配给相同的对象。你可能打算做到以下几点:

foreach (Control x in panel1.Controls) 
{ 
    x.Click += HandleClick; 
} 
+0

这很接近,但同样的问题发生,所有的答案都没有为我做的伎俩,这是一个困难的。 – 2013-03-03 16:47:28

0

,如果你真的想在foreach循环做:

foreach (Control c in panel1.Controls) { 
    if (c.Type == typeof(Label)) { //or something like that... 
      c.Click += HandleClick; 
    } 
}