【问题标题】:Add controls and event handlers dynamically C#动态添加控件和事件处理程序 C#
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2020-03-06
      • 2016-06-06
      • 2019-09-16
      相关资源
      最近更新 更多