C # как отписаться от всех обработчиков событий элемента управления (RadioButton) - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть графический интерфейс, который содержит 10 переключателей и текстовое поле, в которое пользователь должен сделать свой ввод. Событие RadioButton.CheckedChanged подписывается во время выполнения в зависимости от пользовательского ввода (текстовое поле). Итак, в моем случае существует более 50 возможных методов, которые могут подписаться на событие CheckedChanged. Хорошо, я могу отменить подписку на каждый метод один за другим (см. Отрывок из моего кода), но разве нет более трудоемкого и более эффективного способа сделать это? Примерно так: отмените подписку сразу на все методы события CheckedChanged. Или: определите метод, который в данный момент подписывается на это событие, и отмените подписку на этот метод. Я уже искал существующее решение и обнаружил следующее: Как удалить все обработчики событий из события , но в моем случае это решение не работает. Как я уже говорил, в моем случае есть радио кнопки, а не обычные кнопки. Выдержка из моего кода:

 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-файлы. На заднем плане все еще последний подписанный метод, пока другой метод не подписан. Таким образом, если пользователь изменяет ввод в текстовом поле, и ввод больше не совпадает, так что любой другой метод не может быть подписан, последний метод все еще там, и можно получить доступ к связанным PDF-файлам метода, и это именно то, что я хочу остановиться. У меня не было бы проблемы, если бы PDF-файлы можно было получить, только нажав на переключатель. Тогда я мог бы просто сделать все переключатели невидимыми / недоступными. Но это не тот случай, есть еще один вариант для пользователя вызывать PDF-файлы, о котором я не упомянул - дополнительно есть второе текстовое поле, и если вход в этом текстовом поле равен RadioButton.text, соответствующая кнопка-переключатель также получает проверено, и связанный с этим переключателем файл PDF вызывается, и именно здесь начинается проблема.

...