2013-11-21 123 views
2

我試圖使用下面的代碼動態添加面板及其事件處理程序。動態添加控件和事件處理程序C#

但它似乎並不奏效(點擊時觸發事件),雖然它與許多可用答案類似。

請儘可能幫忙。

int items = 0; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    ArrayList al = new ArrayList(); 

    foreach (KnownColor knowColor in Enum.GetValues(typeof(KnownColor))) 
    { 
     Color color = Color.FromKnownColor(knowColor); 
     al.Add(color.Name); 
    } 

    foreach (string i in al) 
    { 
     addListItem(i); 
    } 
} 

public void addListItem(string item) 
{ 
    Panel pnlItem = new Panel(); 

    pnlItem.Location = new Point(0, items * 25); 
    pnlItem.Name = "pnl" + item; 
    pnlItem.Size = new Size(250, 25); 
    pnlList.Controls.Add(pnlItem); 

    Label lbl = new Label(); 
    lbl.Text = item; 
    pnlItem.Controls.Add(lbl); 

    pnlItem.MouseClick += new MouseEventHandler(pnlItem_MouseClick); 

    items++; 
} 

void pnlItem_MouseClick(object sender, MouseEventArgs e) 
{ 
    MessageBox.Show("panel was clicked"); 
} 
+1

不,沒關係。它們可以包含在其他控件內。 – ispiro

+0

所以我如何得到這個工作,因爲一切都很好,但它不會觸發事件。 – thewikus

+0

你是否點擊面板本身或面板內的標籤? – Icemanind

回答

2

您點擊標籤。添加該處理程序,也:

pnlItem.MouseClick += pnlItem_MouseClick; 
lbl.MouseClick += pnlItem_MouseClick; 
0

呀,你要麼點擊標籤或沒有面板的一部分的。我嘗試了代碼,它的工作原理,但是按照其他人的說法加入背景色,以便知道點擊的位置。請注意,標籤周圍的區域也可能會註冊爲「標籤」,即使它看起來好像您正在點擊面板本身(特別是其正下方的區域)。

相關問題