动态添加控件和事件处理程序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");
}

您正在单击标签。也添加那个处理程序:

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

是的,你要么点击了标签,要么根本没有点击面板的任何部分。我试过这个代码,它很有效,但按照其他人说的做,添加一个背景色,这样你就知道该点击哪里了。请注意,标签周围的区域也可能注册为"标签",即使它看起来像是在点击面板本身(尤其是它正下方的区域)。

相关内容

  • 没有找到相关文章

最新更新