Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中动态添加控件和事件处理程序#_C#_Winforms_Event Handling_Panel - Fatal编程技术网

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

C# 在C中动态添加控件和事件处理程序#,c#,winforms,event-handling,panel,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)))

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

但是,它似乎不起作用(单击时触发事件),尽管它与许多可用答案类似

如果可能的话,请帮忙

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;

是的,你要么点击标签,要么根本不点击面板的任何部分。我尝试了代码,它是有效的,但是按照其他人说的做,并添加一个背景色,这样你就知道在哪里单击。请注意,标签周围的区域也可能注册为“标签”,即使您似乎正在单击面板本身(尤其是面板正下方的区域)。

不,没关系。它们可以包含在其他控件中。因此,我如何使其工作,因为一切看起来都很好,但不会触发事件..您是在单击面板本身还是面板内的标签?您只在项目的鼠标单击中添加了事件,您应该将mouseclick事件处理程序添加到标签中,如果您将在代码中添加以下行,您将看到LarsTech的答案如何修复代码:
pnlItem.BackColor=Color.Blue和:
lbl.BackColor=Color.Red并单击蓝色区域。