Ich verwende Visual Studio, um eine GUI-Anwendung in C # zu erstellen. Die Toolbox dient als raffinierte Komponentenpalette, mit der ich Schaltflächen und andere Elemente (aus Gründen der Übersichtlichkeit sage ich "Schaltfläche", wenn ich "Steuerelement" meine) ganz einfach per Drag & Drop auf mein Formular ziehen kann. Dadurch ist das Erstellen statischer Formulare recht einfach. Ich habe jedoch zwei Probleme:
- Das Erstellen der Schaltflächen ist an erster Stelle sehr aufwändig. Wenn ich ein Formular habe, das nicht statisch ist (dh Schaltflächen oder andere Steuerelemente werden zur Laufzeit gemäß den vom Benutzer ausgeführten Aktionen erstellt), kann ich die Palette überhaupt nicht verwenden. Stattdessen muss ich jede Schaltfläche manuell erstellen, indem ich den Konstruktor in der von mir verwendeten Methode aufrufe und dann manuell initialisiere, indem ich die Höhe, Breite, Position, Beschriftung, Ereignisbehandlungsroutine usw. der Schaltfläche festlege. Dies ist äußerst mühsam, da ich all diese kosmetischen Parameter erraten muss, ohne zu sehen, wie das Formular aussehen wird, und außerdem für jede Schaltfläche viele sich wiederholende Codezeilen generiert.
- Es ist auch eine Menge Arbeit, die Tasten dazu zu bringen, etwas zu tun. Der Umgang mit Ereignissen in einer voll ausgestatteten Anwendung ist ein großer Schmerz. Die einzige Möglichkeit, wie ich dies tun kann, besteht darin, eine Schaltfläche auszuwählen, die Registerkarte "Ereignisse" in ihren Eigenschaften aufzurufen, auf das Ereignis zu klicken
OnClick
, damit es das Ereignis imForm
Code des Ereignisses generiert, und dann den Text des Ereignisses auszufüllen. Da ich Logik und Präsentation trennen möchte, werden alle meine Event-Handler als einzeilige Aufrufe an die entsprechende Geschäftslogikfunktion ausgeführt. Wenn Sie dies jedoch für viele Schaltflächen verwenden (stellen Sie sich beispielsweise die Anzahl der in einer Anwendung wie MS Word vorhandenen Schaltflächen vor), wird der Code von myForm
mit Dutzenden von Boilerplate-Event-Handler-Methoden verschmutzt , und es ist schwierig, dies beizubehalten.
Aus diesem Grund ist es sehr unpraktisch, ein GUI-Programm, das komplizierter als Hello World ist, für mich zu erstellen. Um es klar auszudrücken, ich habe keinerlei Probleme mit der Komplexität von Programmen, die ich schreibe und die nur über eine minimale Benutzeroberfläche verfügen. Ich habe das Gefühl, dass ich OOP mit einem angemessenen Maß an Kompetenz verwenden kann, um meinen Geschäftslogikcode ordentlich zu strukturieren. Aber wenn ich die GUI entwickle, stecke ich fest. Es ist so langweilig, dass ich das Rad neu erfinden möchte, und irgendwo gibt es ein Buch, in dem erklärt wird, wie man GUI richtig macht, das ich nicht gelesen habe.
Vermisse ich etwas? Oder akzeptieren alle C # -Entwickler nur die endlosen Listen von Handlern für sich wiederholende Ereignisse und den Code zum Erstellen von Schaltflächen?
Als (hoffentlich hilfreichen) Hinweis erwarte ich, dass eine gute Antwort über Folgendes spricht:
- Verwenden von OOP-Techniken (z. B. das Factory-Muster), um die wiederholte Erstellung von Schaltflächen zu vereinfachen
- Kombinieren Sie viele Ereignishandler zu einer einzigen Methode, die prüft
Sender
, welche Schaltfläche sie aufgerufen hat, und sich entsprechend verhält - XAML und Verwenden von WPF anstelle von Windows Forms
Sie müssen nicht haben , um eine dieser zu erwähnen, natürlich. Es ist nur meine beste Vermutung, welche Art von Antwort ich suche.