Korzystam z programu Visual Studio, aby utworzyć aplikację GUI w języku C #. Przybornik służy jako sprytna paleta komponentów, która pozwala mi łatwo przeciągać i upuszczać przyciski i inne elementy (dla jasności powiem przycisk, gdy mam na myśli „sterowanie”) na moim formularzu, co sprawia, że formy statyczne są dość łatwe do wykonania. Mam jednak dwa problemy:
- Tworzenie przycisków to przede wszystkim dużo pracy. Kiedy mam formularz, który nie jest statyczny (tj. Przyciski lub inne formanty są tworzone w czasie wykonywania zgodnie z tym, co robi użytkownik), nie mogę w ogóle korzystać z palety. Zamiast tego muszę utworzyć każdy przycisk ręcznie, wywołując konstruktor dowolną metodą, której używam, a następnie ręcznie inicjuję, określając wysokość przycisku, szerokość, pozycję, etykietę, moduł obsługi zdarzeń i tak dalej. Jest to niezwykle żmudne, ponieważ muszę zgadnąć wszystkie te parametry kosmetyczne, nie mogąc zobaczyć, jak będzie wyglądać forma, a także generuje wiele wierszy powtarzalnego kodu dla każdego przycisku.
- Zmuszenie przycisków do zrobienia czegoś to również dużo pracy. Radzenie sobie ze zdarzeniami we w pełni funkcjonalnej aplikacji to ogromny ból. Jedyny sposób, w jaki wiem, jak to zrobić, to wybrać przycisk, przejść do karty zdarzeń we właściwościach, kliknąć
OnClick
zdarzenie, aby wygenerowało zdarzenie wForm
kodzie, a następnie wypełnić treść zdarzenia. Ponieważ chcę oddzielić logikę i prezentację, wszystkie moje procedury obsługi zdarzeń to wywołania jednej linii do odpowiedniej funkcji logiki biznesowej. Ale użycie tego do wielu przycisków (na przykład, wyobraź sobie liczbę przycisków obecnych w aplikacji takiej jak MS Word) zanieczyszcza mój kodForm
dziesiątkami metod obsługi zdarzeń i jest to trudne do utrzymania.
Z tego powodu każdy program GUI bardziej skomplikowany niż Hello World jest dla mnie bardzo niepraktyczny. Żeby było jasne, nie mam żadnych problemów ze złożonością programów, które piszę, które mają minimalny interfejs użytkownika - czuję, że jestem w stanie używać OOP z dość wysokim poziomem kompetencji do uporządkowania kodu logiki biznesowej. Ale podczas tworzenia GUI utknąłem. Wydaje się to tak nużące, że mam wrażenie, że odkrywam na nowo koło, a gdzieś tam jest książka wyjaśniająca, jak poprawnie wykonać GUI, której nie przeczytałam.
Czy coś brakuje? Czy też wszyscy programiści C # akceptują niekończące się listy powtarzalnych procedur obsługi zdarzeń i kodu tworzenia przycisku?
Jako (miejmy nadzieję pomocną) wskazówkę oczekuję, że dobra odpowiedź będzie mówić o:
- Wykorzystanie technik OOP (takich jak wzór fabryczny) w celu uproszczenia powtarzalnego tworzenia przycisków
- Łączenie wielu programów obsługi zdarzeń w jedną metodę, która sprawdza
Sender
, który przycisk go nazwał, i zachowuje się odpowiednio - XAML i używanie WPF zamiast Windows Forms
Oczywiście nie musisz wspominać o żadnym z nich. To moje najlepsze przypuszczenie, jakiej odpowiedzi szukam.