【发布时间】:2013-11-21 21:26:11
【问题描述】:
我尝试使用下面的代码动态添加面板及其事件处理程序。
尽管它与许多可用的答案相似,但它似乎不起作用(单击时触发事件)。
如果可能,请提供帮助。
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");
}
【问题讨论】:
-
没有。没关系。它们可以包含在其他控件中。
-
那么我该如何让它工作,因为一切看起来都很好,但它不会触发事件..
-
您是点击面板本身还是面板内的标签?
-
您只在项目的 mouseclick 上添加了事件,您甚至应该将 mouseclick 事件处理程序添加到标签中
-
如果您将以下行添加到您的代码中,您将看到 LarsTech 的答案如何修复您的代码:
pnlItem.BackColor = Color.Blue;和:lbl.BackColor = Color.Red;然后点击蓝色区域。
标签: c# winforms event-handling panel