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

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

最佳答案

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

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

关于c# - 动态添加控件和事件处理程序 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132231/

相关文章:

c# - 在回发时,如何检查 Page_Init 事件中哪个控件导致回发

c# - 从类的基类中捕获异常

c# - TreeView : checkboxes only in child nodes

c# - 在不窃取焦点的情况下选择 TabControl 中的标签页

c# - Xamarin.Forms - 用于异步操作的 BeginInvokeOnMainThread

c# - 用户输入的 String.Equals

c# - 创建并重命名新文件夹后,FolderBrowserDialog 显示不正确的 SelectedPath

javascript - 哪个 jQuery .on() 更快 : direct or delegated?

javascript - 如何通过单击力导向网络中的节点来更新外部条形图

javascript - 如何将父级的按键事件触发到 iframe 中?