【问题标题】:Click event not working on dynamically added button or Panel单击事件不适用于动态添加的按钮或面板
【发布时间】:2016-10-14 17:18:21
【问题描述】:

我在 C# 中使用以下代码添加按钮

Button TextLabel = new Button(); //local variable
TextLabel.Location = new Point(0, 0);
TextLabel.Visible = true;
TextLabel.Enabled = true;
TextLabel.AutoSize = true;
TextLabel.Click += click;
this.Controls.Add(TextLabel);

它的点击处理程序是

protected void click(object o, EventArgs e)
{
   MessageBox.Show("hello");
}

虽然 Button 是可见的并且对鼠标悬停有响应,但点击它时什么也没有发生。可能有什么问题或遗漏? 如果我在独立项目中编写相同的代码,它可以工作!!!!!!奇怪的。但为什么呢????

表单属性:(如果需要)
1.在任务栏中显示:false
2. 无边界
3. 50% 不透明

【问题讨论】:

  • 你把这段代码放在哪里?是在构造函数的 OnLoad 部分吗?
  • 谢谢大家,我现在得到答案了

标签: c# winforms dynamic onclick controls


【解决方案1】:

今天我意识到,仅注册一个控件的点击事件不会使任何事件起作用,除非该控件仍然处于活动状态的父级(在我的例子中是它的窗体)。

父控件将比其子控件更早地收到事件通知。这是一个简单而明显的观察,但如果不注意就会产生不良影响。

那是我犯的错误,我在我的表单激活事件中激活了另一个表单,因此其中的任何控件都没有收到鼠标点击之类的事件。

谈到“悬停效果有效”,那么是的,即使表单处于非活动状态,悬停也有效。

所以我刚刚删除了激活另一个表单的代码行,现在一切正常。

private void Form1_Activated(object sender, EventArgs e)
{
    //if (form2!=null) form2.BringToFront(); //commented this
}

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多