Announcement

Collapse
No announcement yet.

Vorhandene Objekte in neue Programme als Add-In oder Komponente einfügen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vorhandene Objekte in neue Programme als Add-In oder Komponente einfügen

    Hallo!

    Habe das Problemm, dass ich immer wieder das gleiche Formular mit bereits fertigem Code den Anwender zur Verfügung stellen will, damit die es wiederrum in Ihren Programmen einbinden können. Der Anwender soll dann in seinem Programm dieses bereits fertige Formular einfach rüberziehen können (so in etwa wie man bereits verfügbare Buttons, Textboxen usw. rüberzieht).

    Was muss ich da verwenden? Ein Add-In Projekt? Oder soll ich eine Komponente erstellen? Dll?

    Skar

  • #2
    Hallo,

    deine Form braucht nur als Assembly (vorzugsweise als DLL) verteilt werden und dann ist sie ganz normal instanziierbar. Eine Form ist ja auch nur eine Klasse.

    Das Rüberziehen geht AFAIK allerdings nicht - warum weiß ich jetzt nicht. Aber mit UserControls und allen anderen Control gehts schon.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Der Anwender soll dann in seinem Programm dieses bereits fertige Formular einfach rüberziehen können (so in etwa wie man bereits verfügbare Buttons, Textboxen usw. rüberzieht).
      Wie GÜ schon anmerkte geht das bei Forms nicht. Controls aus der Toolbox werden auf andere Containercontrols gezogen (Forms, UserControls irgendwelche anderen Components) und dadurch werden der generierte Codeteil des Containercontrols um das instanzieren und anzeigen des gezogenen Controls ergänzt. Worauf sollte man eine Form ziehen und welche Klasse sollte man um das Anzeigen und instanzieren der Form ergänzen?

      Was man machen könnte wäre einfach eine Component zu nehmen von der abzuleiten. Diese erhält dann von dir Methoden zum Anzeigen der Form. Damit hast du dann etwas (die Component) das man in der Toolbox zum Drag&Drop unterbringen kann. So funktioniert das ja auch bei den CommonDialogs (OpenFileDialog, ColorDialog etc.).

      Comment


      • #4
        Containercontrols
        Genau das ist der Grund warum es Form nicht geht - danke Ralf.
        Hab mir extra noch die Vererbungshierarchie angeschaut, aber...gut dass es kluge Leute gibt

        Was man machen könnte wäre einfach eine Component zu nehmen von der abzuleiten. Diese erhält dann von dir Methoden zum Anzeigen der Form.
        Da ist sicherlich der elegantest Weg. Denn wenn
        immer wieder das gleiche Formular mit bereits fertigem Code
        kann da so wunderbar gekapselt werden und nur über die Component (bzw die konkrete Implementierung) zugänglich sein.


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Wie kann ich so ein Component erstellen? Wie erfolgt dann die Weitergabe an andere? Wäre da ein Add-in nicht praktischer?

          Comment


          • #6
            Wie kann ich so ein Component erstellen?
            Minimalbeispiel:
            [highlight=vbnet]
            Public Class MeineKomponente
            * * Inherits Component
            * * Public Sub ZeigeMeineForm()
            * * * * Dim m As New MeineForm()
            * * * * m.Show()
            * * End Sub
            End Class
            [/highlight]
            Die Komponente bietet dabei Methoden welche die Aktionen der Form kapseln - zB das Anzeigen.

            Wie erfolgt dann die Weitergabe an andere?
            Die Komponente wird in einem Projekt "Klassenbibliothek" erstellt. Diese kann wie jede andere DLL verteilt werden (zB Download, Email, ...)

            Wäre da ein Add-in nicht praktischer?
            Nein. Einfacher gehts nicht.
            Für ein PlugIn muss der Client Code schreiben um eine Schnittstelle für das PlugIn zu schaffen. Weiters muss das PlugIn dynamisch geladen werden, ...
            Mit der Komponente braucht er die nur von der Toolbox (wenn er sie dort hinzugefügt hat) hineinziehen un die Methoden ausführen.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Danke für alle Tipps!!!

              Am besten gefällt mir die Möglichkeit, dass ich ein UserControl anlege. Dann kann ich dieses in jede beliebige Form ziehen. Eine Frage stellt sich mir noch: Kann ich die Ereignisse eines Elements in einem UserControl (z.B. ein Button) dann noch Auswerten und auf diese Elemente dann von aussen noch Einfluss nehmen (z.B. Button in einem User Control disabeln) ?

              Comment


              • #8
                entweder direkt im UserControl Code oder wenn du von außen drauf zugreifen willst musst du die Objekte sichtbar machen sprich du erstellst eine Property für den Button beispielsweise dann kannst du praktisch auf alle Member zugreifen oder du erstellst Propertys für einzelne Eigenschaften des Buttons die von außen zugänglich sein sollen. Um auf die Ereignisse zu reagieren solltest du diese auch nach außen weiterreichen
                Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                Comment


                • #9
                  Am besten gefällt mir die Möglichkeit, dass ich ein UserControl anlege.
                  Ich dachte du hast
                  immer wieder das gleiche Formular mit bereits fertigem Code den Anwender zur Verfügung stellen will, damit die es wiederrum in Ihren Programmen einbinden können.
                  Das widerspricht sich - Form != UserControl

                  Kann ich die Ereignisse eines Elements in einem UserControl (z.B. ein Button) dann noch Auswerten und auf diese Elemente dann von aussen noch Einfluss nehmen (z.B. Button in einem User Control disabeln) ?
                  Von außen sollte auf die Elemente der Form/UserControl nicht zugegriffen werden. Das wäre unsauberer Entwurf, denn die Form/UserContral stellen einen logischen Container von Controls dar die sie kapseln.
                  Von außen sollte gar nicht gewusst werden wie das UserControl aufgebaut ist. Von außen erscheint das UserControl als eine Einheit.
                  Darum solltest die im UserControl Methoden/Eigenschaften definieren mit denen der Button im UserControl disabled werden kann.
                  Selbiges gilt für Ereignisse. Diese sind im UserControl neu zu defnieren und auch auszulösen (von außen ist ja nicht bekannt dass das UserContorl einen Button besitzt denn dieser sollte niemlas Public sein).



                  mfG Gü
                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                  Comment


                  • #10
                    Normalweise gilt neue Frage neuer Thread. Aber ich will mal nicht so päpstlich sein.

                    Du solltest programmatisch von außen nie direkt mit dem Inhalt eines UserControls(oder überhaupt mit irgendeiner Klasse) interagieren. Falls du das technisch hin bekommst warten mittelfristig mit so einem Weg Probleme auf dich (Stichworte encapsulation bzw. information hiding als Grundprinzipien der OO Programmierung).

                    Du solltest diesen Event vom UserControl wieder veröffentlichen lassen. Also das UserControl fängt das Event des Buttons und wirft in diesem Fall selbst einen Event der von außen bearbeitet werden kann. So bist du sauber entkoppelt.

                    Comment

                    Working...
                    X