C#如何退订控件的所有事件处理程序(RadioButton)

时间:2018-11-02 18:01:31

标签: c# radio-button controls eventhandler unsubscribe

我有一个包含10个单选按钮和一个文本框的GUI,用户必须在其中进行输入。根据用户输入(文本框)在运行时订阅RadioButton.CheckedChanged事件。因此,就我而言,有50多种可能的方法可以订阅CheckedChanged事件。好的,我可以逐个取消订阅每个方法(请参见我的代码摘录),但是这样做没有那么耗时和更有效的方法吗?例如: 一次取消订阅CheckedChanged事件中的所有方法。或者:确定当前订阅此事件的方法,然后取消订阅该方法。 我已经在寻找现有的解决方案,但发现了这个问题:How to remove all event handlers from an event,但就我而言,此解决方案不起作用。正如我所提到的,就我而言,有单选按钮,而不是普通按钮。 摘录自我的代码:

 public List<RadioButton> RbList
 public Form1()
    {
        InitializeComponent();
        WindowState = FormWindowState.Maximized;

        RbList = new List<RadioButton>
        {
            radioButton1, radioButton2, radioButton3, radioButton4, radioButton5, radioButton6, radioButton7,
            radioButton8, radioButton9, radioButton10
        };

    }
    private void Unsubscribe()
    {
        for (int i = 0; i < RbList.Count; i++)
        {
            RbList.ElementAt(i).CheckedChanged -= Method1;
            RbList.ElementAt(i).CheckedChanged -= Method2;
            ...
        }
    }

有关所提问题的其他信息: 最后的订阅方法不会取消订阅。使用单选按钮可以调用特定的PDF。只要没有其他方法被订阅,在后台仍然是最后一个被订阅的方法。因此,如果用户更改了文本框中的输入,并且输入不再匹配,因此无法订阅任何其他方法,那么最后一个方法ist仍然存在,并且可以访问与该方法关联的PDF,这正是我所要做的想停下来。如果仅通过单击单选按钮可以访问PDF,我就不会有问题。然后,我可以简单地使所有单选按钮不可见/不可访问。但这不是这种情况,用户还有另一种选择来调用PDF,我没有提到-另外还有第二个文本框,如果此文本框中的输入等于RadioButton.text,则关联的单选按钮也会选中该复选框,然后将调用与此单选按钮关联的PDF,这就是问题开始的地方。

0 个答案:

没有答案