Я использую Visual Studio для создания приложения с графическим интерфейсом в C #. Панель инструментов служит изящной палитрой компонентов, которая позволяет мне легко перетаскивать кнопки и другие элементы (для ясности я скажу кнопку, когда я имею в виду «контроль») на мою форму, что делает статические формы довольно простыми для выполнения. Однако я сталкиваюсь с двумя проблемами:
- Создание кнопок в первую очередь это большая работа. Когда у меня есть форма, которая не является статичной (т.е. кнопки или другие элементы управления создаются во время выполнения в соответствии с тем, что делает пользователь), я вообще не могу использовать палитру. Вместо этого мне приходится создавать каждую кнопку вручную, вызывая конструктор в любом методе, который я использую, а затем вручную инициализировать, указав высоту кнопки, ширину, положение, метку, обработчик события и так далее. Это очень утомительно, потому что я должен угадать все эти косметические параметры, не имея возможности увидеть, как будет выглядеть форма, а также генерировать много строк повторяющегося кода для каждой кнопки.
- Заставить кнопки сделать что-то - тоже много работы. Работа с событиями в полнофункциональном приложении - огромная боль. Единственный способ, которым я знаю, как это сделать, - это выбрать кнопку, перейти на вкладку событий в ее свойствах, щелкнуть
OnClick
событие, чтобы оно сгенерировало событие вForm
коде, а затем заполнить тело события. Поскольку я хочу разделить логику и представление, все мои обработчики событий заканчиваются однострочными вызовами соответствующей функции бизнес-логики. Но использование этого для многих кнопок (например, представьте количество кнопок, присутствующих в приложении, подобном MS Word) загрязняет мой кодForm
десятками стандартных методов обработки событий, и это трудно поддерживать.
Из-за этого любая программа с графическим интерфейсом, более сложная, чем Hello World, очень непрактична для меня. Чтобы было ясно, у меня нет проблем со сложностью в программах, которые я пишу с минимальным пользовательским интерфейсом - я чувствую, что могу использовать ООП с достаточной степенью компетентности для аккуратной структуризации своего кода бизнес-логики. Но при разработке GUI я застрял. Это кажется таким утомительным, что я чувствую, что заново изобретаю колесо, и где-то там есть книга, объясняющая, как правильно делать GUI, которую я не читал.
Я что-то пропустил? Или все разработчики C # просто принимают бесконечные списки повторяющихся обработчиков событий и кода создания кнопок?
Как (надеюсь, полезный) совет, я ожидаю, что хороший ответ будет говорить о:
- Использование методов ООП (например, заводской шаблон) для упрощения повторного создания кнопок
- Объединение множества обработчиков событий в один метод, который проверяет
Sender
, какая кнопка вызывала ее, и ведет себя соответственно - XAML и использование WPF вместо Windows Forms
Вы не должны упоминать ни одного из них, конечно. Это просто мое лучшее предположение относительно того, какой ответ я ищу.