2013-03-03 66 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; 
    } 
}