Ich erinnere mich, wie ich VB4 gelernt und eine Schaltfläche auf ein Formular gezogen, auf diese Schaltfläche doppelklickt und Code in den Ereignishandler eingegeben habe, mit dem ich gerade magisch gesegnet worden war. Als ich von QBASIC kam, war ich begeistert von dem "V" in "VB". Der visuelle Designer war buchstäblich das Beste seit geschnittenem Brot.
Natürlich können Sie das alles programmgesteuert tun, aber die Magie des "V" war so ansprechend, dass Sie einfach nicht anders konnten, als diesen Knopf zu ziehen. Wir wurden ermutigt, diesen Weg zu gehen.
Aber dann habe ich vor ein paar Jahren angefangen, etwas über C # und das .net-Framework zu lernen, und war fasziniert von der Art und Weise, wie alles, was ich zu wissen glaubte, gerade aus dem Fenster gegangen war. In VB6 steckt viel Magie , die in .net vollständig enthüllt ist: Nehmen wir InitializeComponents
zum Beispiel Konstruktoren und die Methode. In letzterem finden Sie alle Steuerinstanzen, die Sie aus der Toolbox gezogen haben, alle Ereignisse, die Sie registriert haben, und die Eigenschaften, die Sie im Designer festgelegt haben.
Und das ist in Ordnung ... ich denke. Es ist nur so, dass ich das Gefühl habe, nicht zu "besitzen", was los ist. Dieser Code, den ich nur über den Designer ändern kann, nervt mich zum Teufel. Jedes Mal, wenn Sie eine Schaltfläche mit der Aufschrift "Ok" von einem Formular in ein anderes kopieren (manchmal zusammen mit dem Bruder "Abbrechen"), duplizieren Sie tatsächlich Code, und das ist eine Sünde, nicht wahr? DRY, wiederhole dich nicht, sagt der Papst .
Abgesehen von Religionen und Denkschulen sollten wir bei aller Objektivität nicht stattdessen Formen von Basisformen ableiten und die Schaltfläche "Ok" (und alle ihre Freunde) auf der Basisform leben lassen? So etwas wie ein, FormBase
von dem a abgeleitet ist DialogFormBase
; Alle Klassen in kürzester Zeit erstellt ... durch Eingabe von Code. Die Schaltflächen werden abhängig davon erstellt, wie die Klasse instanziiert wird (dh ein Konstruktor-Enum-Argument bestimmt, welche Schaltflächen erstellt werden sollen). Die Steuerelemente werden in einer Anordnung von geteilten Bedienfeldern und Flusslayout-Bedienfeldern angeordnet, die in das Formular als eingefügt werdenContent
das passt in das Hauptinhaltsfenster. Ist es nicht das, was ASP.net mit Masterseiten und Inhaltsplatzhaltern macht? Ich würde ein Formular ableiten, wenn ich eine neue "Masterseite" benötige, aber diese neue "Masterseite" stammt immer noch von einer Basisformularklasse, sodass die visuellen Elemente in der gesamten Anwendung konsistent sind.
Für mich ist das viel mehr Wiederverwendung von Code als alles andere, was ich jemals mit dem Designer in WinForms gemacht habe, und es war nicht einmal schwer, und Code ist nicht mit einer 200-Zeilen-Methode überfüllt, über die ich keine Kontrolle habe Wenn Sie Kommentare dort platzieren, wo ich möchte, werden sie nicht von einem Designer überschrieben. Ich denke, es ist nur eine Frage der Muster und der Architektur, was mich zu diesem Link geführt hat: Das beste Design für Windows-Formulare mit gemeinsamen Funktionen , bei dem mir klar wurde , dass ich genau richtig war, mit Ausnahme der Antwort dort, legt genau nahe, was ich bin zu tun, aber es ist die Beratung gegen Form Vererbung , weil der Designer - Überlegungen. Das ist der Teil, den ich nicht verstehe .Aufgrund von Überlegungen zur Codestruktur, insbesondere in Bezug auf die Vererbung von Formularen und Steuerelementen, die ich nicht als gut zu vermeiden sehe , bricht sie den Designer .
Wir können nicht alle nur faul sein, also welcher Teil fehlt mir?