Механизм обработчика событий динамической кнопки C # - PullRequest
0 голосов
/ 05 января 2012

Я создаю кнопки динамически для пользовательского приложения.Теперь я должен сообщить новой форме, какой текст применять к кнопкам, используя параметры формы, затем форма создает кнопки.Теперь у меня есть проблема - события для этих кнопок: Каков наилучший механизм для прохождения событий нажатия кнопки.Я не могу получить доступ к форме из исходной формы и могу передавать только простые типы данных (и массивы).

Моя первая мысль - использовать код для ссылки на соответствующий метод в статическом классе - в основном, передать массив целых чисел с именами кнопок и их обработчик onclick вызывает один метод - handle (intcode) -> где код используется в гигантском операторе switch для вызова соответствующего метода.

Но я сомневаюсь, что это лучший механизм.Я бы предпочел создать прослушиватель какого-то рода, который просто прослушивал бы нажатия кнопок, и, если щелчок будет обработан, определите, какая кнопка была нажата, и управляйте ею оттуда.

Я посмотрел на схему наблюдателя, и я не совсем уверен, что это лучший вариант для подражания.Проблема не в том, что нет решения, проблема в том, что я хочу ЛУЧШЕЕ решение.

Это на C # для монодроида - но влияние этой информации должно быть минимальным.

Спасибо

Ответы [ 3 ]

1 голос
/ 05 января 2012

Если бы это был WPF, я бы использовал Commanding, но я не знаю, доступен ли он для монофроида.Вы можете посмотреть на http://www.codeproject.com/KB/dotnet/EventBroker.aspx

1 голос
/ 05 января 2012

Не совсем понимаю, в чем собственно ваша проблема, но вот как вы должны иметь дело с динамическими элементами управления и обработчиками событий:

Button myNewButton = new Button { Text = "MyCaption" };
myNewButton.Click += (sender, e) =>
    {
        ((Button)sender).Text = "New text here!";
        // Another logic could be put here
    };
0 голосов
/ 25 января 2012

В настоящее время у меня есть две опции:

  1. Использовать отражение - передать имя метода кнопке, и эта кнопка затем может вызвать метод на основе переданного строкового значения.Затем просто создайте статический класс, в котором хранятся все методы кнопок.

  2. Используйте оператор switch - поскольку у меня могут быть делегаты, которые принимают параметры (один из которых является объектом SENDER), я легко могуотправить объект отправителя методу, содержащему оператор switch, который выполняет действие, основанное на этом объекте.

В своем исследовании я определил, что первое (отражение) является предпочтительным, особенно с тех пор, какколичество кнопок довольно большое.

REFS:http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/
Большие операторы Switch: Bad OOP? Метод фабрики - случай против отражения

...