Dll Objekte Ändern

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Dll Objekte Ändern

    Heyho,

    ich wollte mal fragen, wie man mit Dll's Objekte ändern kann, soll dann z.B. so aussehen:


    In Form1 wird die Methode "BlaBlaBla" in der Dll "xyLib" aufgerufen.
    Der Code in "xyLib" soll jetzt einige Objekte in der Form1 ändern.
    z.B. soll ein neues Label hinzugefügt werden und im MenüStrip soll ein neuer Reiter angelegt werden mit dem Namen "TestReiter"
    Hi
    erst mal die Darstellung (GUI) von der internen Programmlogik trennen. Eine Form erfüllt tatsächlich nur einen Zweck, nämlich Benutzerein- und -ausgabe. Mache dir Gedanken, wie du deine Architektur so gestaltest, dass das reibungslos funktioniert. Dazu kannst du z.B.
    - Polymorphie (abstrakte Klassen, Interfaces, ...)
    - Events/Delegaten
    verwenden. Eine Dll sollte GUI-unabhängig sein. D.h. man operiert entweder auf einer Abstraktion der GUI (davon losgelöst) oder vollkommen unabhängig, übergibt aber niemals eine Form direkt an einen Dll-Aufruf, wenn dieser dann an der GUI wesentliche Veränderungen vornimmt (mit Ausnahmen).
    Was genau hast du denn vor?

    Gruß
    ~blaze~
    Um sowas zu implementieren stelle einfach ein Interface mit z.B.

    VB.NET-Quellcode

    1. Public Interface IMyPlugIn
    2. Function GetUIExtension() As IEnumerable(Of String)
    3. End Interface

    usw. bereit. Du kannst statt String auch einfach eine Klasse bereitstellen, die Controls enthält und diese dynamisch anordnen (z.B. in einem FlowLayoutControl oder dergleichen). Wenn du eine Baumstruktur erzeugst, die die GUI abstrakt abbildet und die über Identifizierer arbeitet (definierten Strings, GUIDs oder ähnlichem), kannst du auch Elemente in die bestehende Hierarchie integrieren. Sprich:
    Du hast ein GUIElement, das den Identifizierer "MainForm" hat. Dieses stellt als Control ein Fenster bereit und als Root-Element fungiert. Die Form enthält ein TreeView, das ebenfalls als GUIElement festgehalten wird, aber bspw. mit dem Identifizierer "ContextHierarchy", usw. Wenn jetzt jemand ein Element in ContextHierarchy einfügen möchte, bildet er ebenfalls die Struktur mit den Identifizierern "MainForm" und "ContextHierarchy" auf das von "ContextHierarchy" bezeichnete Element ab und befiehlt diesem, ein Element einzufügen. Das kannst du wiederum abstrakt oder diskret lösen. Abstrakt wäre über eine ICollection<...>, das ein Element einfügt (macht so vmtl. keiner, außer mir), diskret eben über einen TreeNode, da du bereits weißt (musst du wissen), dass ein TreeView diesen Platz einnimmt. Nachteil des Wissens ist allerdings, dass eine nachträgliche Änderung des Controls zur Inkompatibilität des PlugIns führt und zusätzlichen Wartungsaufwand mitbringt.

    Plug-In-Systeme sind selbst eigentlich Ausnahmen, da sie in den meisten Fällen eben zusätzliche GUI-Elemente bereitstellen, die in der ursprünglichen Anwendung nicht so vorgesehen waren. D.h. du könntest in diesem Fall das schon über ein Control lösen, aber eine automatische Verwaltung find' ich persönlich da immer schöner, da man da keinen groben Unfug anstellen kann, wie die gesamte Anwendung mal auseinander nehmen.

    Gruß
    ~blaze~

    Julius schrieb:

    Der Code in "xyLib" soll jetzt einige Objekte in der Form1 ändern.
    Das issn Architektur-Denkfehler.
    Die Lib kann nur Hilfsklassen oder HilfsModule für die Main-Anwendung bereitstellen. Keinesfalls soll sie im MainForm herum-fuhrwerken.

    Wenn es deinem MainForm genehm ist, kann es ja über das Interface iwelche Methoden des PlugIns aufrufen, und anhand der Rückgabewerte sich iwie verändern (etwa sich Controls hinzufügen)

    Hilfsklassen/Hilfsmodule werden vom MainForm genutzt, aber nicht umgekehrt.
    gugge auch VeryBasics
    Nicht anders machst dus. Nur legst du kein UserControl an, sondern eine Klasse/Interfaces. Du programmierst in einer objektorientierten Sprache, warum also nicht auch die Objektorientierung nutzen? Lernst du btw. aus Videos? Das Video, das du geschickt hast, war zwar kein 100%-Fail, da in den 4 Minuten genau das gezeigt wurde, was in einem Buch in 20 Sekunden gelesen und verstanden werden konnte, aber ich würde es trotzdem unterlassen.
    Beherrscht du denn objektorientiertes Programmieren?

    Gruß
    ~blaze~
    Hmm hab das jetzt relativ einfach hinbekommen (böse Blicke und Kommis darf ich mir wohl gleich durchlesen dürfen >.<)

    Und zwar hab ich das einfach so geregelt:

    VB.NET-Quellcode

    1. Imports ClassLibrary1Public
    2. Class Form1
    3. Dim Dll As ClassLibrary1.UserControl1 = New ClassLibrary1.UserControl1
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Me.Controls.Add(Dll)
    6. End Sub
    7. End Class



    Das UserControl kann man dann beliebig verändern.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Julius“ ()