none
Generisch eine Forms-GUI erstellen - aber wie die Eventhandler erstellen? RRS feed

  • Frage

  • Hi,

    ich möchte generisch eine Forms-GUI erstellen.

    Ich werde die Controls über eine Baumstruktur einlesen.

    Wie die Controls plaziert werden und deren sonstigen Eigenschaften

    stellt kein Problem dar, aber wie generiere ich die Eventhandler?

    Habt ihr eine Idee, oder wer hat schon mal ähnliches realisiert?

    Danke Michael

    Donnerstag, 3. Mai 2012 06:23

Antworten

  • Hallo Michael,

    was die Skepsis angeht: Ja, die ist vorhanden und hat auch ihre Gründe.
    Ich hatte (vor etlichen Jahren) mit Marc Cliftons Ideen geliebäugelt,
    es erwies sich aber als unpraktikabel aus einer Vielzahl von Gründen.

    Eine Strukturierung einer Applikation (eines Frameworks) erreichst Du nicht durch generische Formulare.
    Und die ist dafür weder notwendig noch bringt das IMO effektive Vorteile -
    Du würdest vielmehr jegliche Vorteile der existierenden Designer verlieren.

    Ein Modulsystem lässt sich (heute)  mit MEF (o. ä.) umsetzen und verlangt nur einige Schnittstellen,
    um z. B. das Einklinken in die von Dir angesprochenen Menüs zu erreichen.
    (Wobei ich tief geschachtelte Programmmenüs auch der Vergangenheit zuordnen würde -
    flach und "platt" ist heutzutage in, siehe die Tendenzen von Windows 8 uam.)

    Auch Rollen lassen sich darüber integrieren und was im Katalog nicht vorhanden ist,
    kann auch nicht genutzt werden => ein Trennen in Assemblies reicht.

    Das in eine konkrete Form umzusetzen bedarf ebenfalls einige Tage mehr an Aufwand,
    ist aber IMHO flexibler und zukunftssicherer.

    Gruß Elmar

    • Als Antwort markiert mimuel Donnerstag, 3. Mai 2012 11:32
    Donnerstag, 3. Mai 2012 09:36
    Beantworter

Alle Antworten

  • Hallo Michael,

    wenn Du Dir so etwas noch antun willst, schau Dir mal an:
    Using the Windows Forms XML Parser Sample

    Marc Clifton hatte es vor Jahren mit MyXaml noch weiter getrieben
    und sich an WPF orientiert: MyXAML--XAML-style gui generator (added styles)

    Wenn das am Ende mehr als Simplest-Formulärchen werden sollen, solltest Du einige Monate einplanen.

    Gruß Elmar

    Donnerstag, 3. Mai 2012 06:57
    Beantworter
  • Huh? Deine Eventhandler müssen im Grunde schon existiere, wenn du nur die Controls erzeugst.

    D.h. im schlimmsten Falle hast du nur einen Satz verwendbarer Methoden. Jetzt musst du sie nur noch korrekt verpacken:

    namespace WindowsFormsApplication2
    {
        using System;
        using System.Windows.Forms;
    
        public partial class Form1 : Form
        {
            private System.Windows.Forms.Button dynamicButton;
    
            public Form1()
            {
                InitializeComponent();
                this.dynamicButton = new System.Windows.Forms.Button();
                this.dynamicButton.Location = new System.Drawing.Point(69, 64);
                this.dynamicButton.Name = "button1";
                this.dynamicButton.Size = new System.Drawing.Size(59, 22);
                this.dynamicButton.TabIndex = 0;
                this.dynamicButton.Text = "button1";
                this.dynamicButton.UseVisualStyleBackColor = true;
                this.Controls.Add(this.dynamicButton);
                this.dynamicButton.Click += new EventHandler((o, ea) => { this.DoSomething(); });
            }
    
            private void DoSomething()
            {
                MessageBox.Show("D'oh!");
            }
        }
    } 

    Donnerstag, 3. Mai 2012 07:01
  • Hallo Elmar,

    deine Worten entmehme ich mindestens ein Höchstmaß an Skepsis!

    Die zu erstellende HMI besteht letztlich aus einer Anzahl von Standard-Controls:

    • Fenstern
    • modalen Fenstern
    • Menüs
    • Buttons

    die in einer Baumstruktur organisiert sind.

    Natürlich möchte ich nicht jedes Fenster in seinen Details generisch erstellen, aber die

    Struktur des Programmes soll generisch organisiert sein.

    Ziel könnte sein:

    ich erweitere die Baumstruktur um ein weiteres Fenster und füge darin eine Instanz

    eines bekannten Menüs ein, dessen Button auf bekannte Fenster verweisen.

    Somit müßte ich den QuellCode nicht erweitern sondern nur die Programmstruktur ergänzen.

    (Wahrscheinlich etwas zu optimistisch gedacht ...)

    Eine solche Struktur ließe sich besonders gut mit Rollen und Lizenzmodellen kombinieren.

    Gruß Michael

    Donnerstag, 3. Mai 2012 08:24
  • Dir ist schon klar, das du mit diesem Modell ein Testproblem hast, da es äusserst schwierig ist, sämtlich mögliche Strukturen zu testen?

    Wenn es um Rollen und Lizenzen geht würde ich zwei Dinge ins Auge fassen:

    1. Modularer Aufbau. D.h. es werden Assemblies an Lizenzen gebunden und ggf. nur dann ausgelliefert.
    2. Innerhalb eines Moduls: Vollständige Implementierung aller Funktionen. Deaktivierung auf Rollenbasis.
    Donnerstag, 3. Mai 2012 08:41
  • Danke für die Tipps!
    Donnerstag, 3. Mai 2012 09:23
  • Hallo Michael,

    was die Skepsis angeht: Ja, die ist vorhanden und hat auch ihre Gründe.
    Ich hatte (vor etlichen Jahren) mit Marc Cliftons Ideen geliebäugelt,
    es erwies sich aber als unpraktikabel aus einer Vielzahl von Gründen.

    Eine Strukturierung einer Applikation (eines Frameworks) erreichst Du nicht durch generische Formulare.
    Und die ist dafür weder notwendig noch bringt das IMO effektive Vorteile -
    Du würdest vielmehr jegliche Vorteile der existierenden Designer verlieren.

    Ein Modulsystem lässt sich (heute)  mit MEF (o. ä.) umsetzen und verlangt nur einige Schnittstellen,
    um z. B. das Einklinken in die von Dir angesprochenen Menüs zu erreichen.
    (Wobei ich tief geschachtelte Programmmenüs auch der Vergangenheit zuordnen würde -
    flach und "platt" ist heutzutage in, siehe die Tendenzen von Windows 8 uam.)

    Auch Rollen lassen sich darüber integrieren und was im Katalog nicht vorhanden ist,
    kann auch nicht genutzt werden => ein Trennen in Assemblies reicht.

    Das in eine konkrete Form umzusetzen bedarf ebenfalls einige Tage mehr an Aufwand,
    ist aber IMHO flexibler und zukunftssicherer.

    Gruß Elmar

    • Als Antwort markiert mimuel Donnerstag, 3. Mai 2012 11:32
    Donnerstag, 3. Mai 2012 09:36
    Beantworter
  • Vielen Dank!
    Donnerstag, 3. Mai 2012 11:33
  • Hallo Elmar,

    zu Marc Clifton

    meinst Du das?

    http://www.codeproject.com/Articles/37272/How-Programming-Should-Be-Done

    Hierbei wird ja auch schon Dependency Injection (mit Spring.Net) angewendet.

    Gruß Michael

    Donnerstag, 3. Mai 2012 14:31
  • Hallo Michael,

    Marc Clifton ist im Laufe der Jahre in seinen Codeproject-Artikeln sehr viele Bereiche angegangen...
    und nein, den Artikel kannte ich nicht.

    Die angesprochenen Konzepte dort sind "Nichts Neues" und wären nur Teil-Aspekte einer Anwendung.

    Gruß Elmar

    Donnerstag, 3. Mai 2012 15:27
    Beantworter