【问题标题】:Event Handler in c# works only on new controlsc# 中的事件处理程序仅适用于新控件
【发布时间】:2013-03-18 18:50:24
【问题描述】:

这是在使用 c# 的 WinForms 中。 有一个包含 10 个单选按钮的表单,即汽车、自行车、火车、公共汽车等。还有一个带有文本“XYZ”的标签。所有这些都在同一个组框中。 我编写了以下常用方法来隐藏选中单选按钮时的文本。

private void Hide_radio(object sender, EventArgs e)
{
    RadioButton rb = sender as RadioButton;
    if (rb != null)
       label1.Text="";              
}

奇怪的是,以下面的方式调用事件(就在初始化组件下),仅适用于少数无线电而不是全部。当我拖动一个新收音机时,它可以工作。 [严格拖放。没有添加或删除新代码。]

foreach (Control gb1c in groupBox1.Controls)
{
    if (gb1c is RadioButton)
    {
        RadioButton rb = gb1c as RadioButton;
        rb.CheckedChanged += new MouseEventHandler(Hide_radio);
        break;
    }
}

我检查了designer.cs,所有收音机的代码都是一样的。 所以基本上,事件处理只在少数新收音机上工作,但不是全部。 为什么 C# 表现得这么幼稚..

【问题讨论】:

  • “为什么 C# 表现得如此幼稚”——它只做你告诉它做的事情。
  • 你不需要一个 break 语句你需要的是创建一个方法来检查你需要什么,而不是先强制转换我会亲自检查 Control 是否也属于特定类型一种您需要进行递归调用的方法..Why is C# acting so childish 它不是它的语言'可能是user / coder

标签: c# winforms event-handling


【解决方案1】:

您在第一次订阅事件时打破了 foreach 循环。从循环中删除“中断”。

【讨论】:

  • 啊!所以那是我内心的孩子……消除休息是有效的。再次感谢大家的快速发帖。
【解决方案2】:

您对break; 的使用将退出循环,因此任何尚未分配事件处理程序的控件都不会获得事件处理程序。这不是 C# 的幼稚行为,而是 C# 完全按照你的吩咐去做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多