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编码>并单击蓝色区域。