Я використовую Visual Studio для створення програми GUI в C #. Панель інструментів служить чудовою палітрою компонентів, що дозволяє мені легко перетягувати кнопки та інші елементи (для наочності я кажу кнопку, коли я маю на увазі "управління") на свою форму, що робить статичні форми досить простими. Однак у мене виникають дві проблеми:
- Створення кнопок в першу чергу - це велика робота. Якщо у мене є форма, яка не є статичною (тобто кнопки або інші елементи керування створюються під час виконання відповідно до того, що робить користувач), я взагалі не можу використовувати палітру. Натомість я повинен створити кожну кнопку вручну, викликаючи конструктор будь-яким методом, який я використовую, а потім ініціалізувати вручну, вказавши висоту кнопки, ширину, положення, мітку, обробник подій тощо. Це надзвичайно виснажливо, тому що я повинен здогадуватися про всі ці косметичні параметри, не маючи змоги побачити, як виглядатиме форма, а також створює багато рядків повторюваного коду для кожної кнопки.
- Змусити кнопки щось робити - це теж велика робота. Справа з подіями в повнофункціональній програмі - це величезний біль. Єдиний спосіб, коли я знаю, як це зробити, це вибрати кнопку, перейти до вкладки подій у її властивостях, натиснути
OnClick
подію так, щоб вона генерувала подію вForm
коді s, а потім заповнила тіло події. Оскільки я хочу розділити логіку та презентацію, всі мої обробники подій в кінцевому підсумку є однолінійними дзвінками до відповідної функції ділової логіки. Але використовуючи це для багатьох кнопок (наприклад, уявіть, що кількість кнопок, присутніх у програмі, як MS Word), забруднює код могоForm
десятками методів обробника подій на платформі, і це важко підтримувати.
Через це будь-яка програма GUI, складніша за Hello World, для мене насправді дуже недоцільна. Щоб було зрозуміло, я не маю жодних проблем зі складністю програм, які я пишу, які мають мінімальний інтерфейс користувача - я відчуваю, що я в змозі використовувати OOP з достатньою мірою компетенції, щоб акуратно структурувати мій бізнес-логічний код. Але при розробці GUI я застряг. Це здається набридливим, що я відчуваю, що я вигадую колесо, а там десь книга, що пояснює, як правильно робити графічний інтерфейс, який я не читав.
Я щось пропускаю? Або всі розробники C # просто приймають нескінченні списки повторюваних обробників подій та код створення кнопок?
Як (сподіваюся, корисна) підказка, я сподіваюся, що хороша відповідь буде говорити про:
- Використовуючи методи OOP (наприклад, заводський зразок) для спрощення повторного створення кнопок
- Об'єднання багатьох обробників подій в єдиний метод, який перевіряє,
Sender
щоб визначити, яка кнопка викликала її, і поводиться відповідно - XAML та використання WPF замість Windows Forms
Звичайно, вам не потрібно нічого згадувати. Це просто найкраща здогадка про те, яку відповідь я шукаю.