动态添加控件和事件处理程序C#

时间:2013-11-21 21:26:12

标签: c# winforms event-handling panel

我尝试使用下面的代码动态添加面板及其事件处理程序。

然而它似乎不起作用(点击时触发事件)虽然它与许多可用答案类似。

请尽可能帮助。

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");
}

2 个答案:

答案 0 :(得分:2)

您正在点击标签。添加该处理程序:

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

答案 1 :(得分:0)

是的,你要点击标签,要么根本不点击面板的任何部分。我尝试了代码,它可以工作,但是做其他人所说的并添加背面颜色,这样你就知道在哪里点击了。请注意标签周围的区域也可能会注册为“标签”,即使您正在点击面板本身(特别是它下面的区域)。