vb.net von DLL aus auf Control aus Hauptanwendung zugreifen

  • VB.NET
  • .NET 4.5

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    vb.net von DLL aus auf Control aus Hauptanwendung zugreifen

    Hallo liebe Community,

    wie kann ich aus einer DLL raus auf ein Control von meiner Anwendung zugreifen?
    Hier einfach mal mein Testcode (von der DLL):

    VB.NET-Quellcode

    1. Imports Quixo_OS_2._1 ' Verweis ist auf meiner Hauptanwendung gesetzt
    2. Imports System.Windows.Forms
    3. Imports System.Drawing
    4. Public Class Class1
    5. Public Shared Sub shownotify()
    6. Dim test As New Button
    7. test.Size = New Size(128, 128)
    8. test.ForeColor = Color.BlanchedAlmond
    9. test.Text = "Cool geht"
    10. ' Code zum hinzufügen fehlt
    11. Hauptanwendung.Form.FlowLayoutPanel.controls.add(test) ?
    12. End Sub
    13. End Class


    Das Problem ist halt das ich nicht weiß wie man aus einer DLL heraus auf Controls von meiner Anwendung zugreifen kann
    Quixo OS 2.1 das Virtuelle Betriebssystem : 50%

    Quixo OS 2.1 das Virtuelle Betriebssystem - Entwicklung geht weiter
    Webseite geupdatet schaut nun vorbei ;)
    Option Strict On nicht vergessen!
    Erstmal aus dem Nichts heraus: Gar nicht - woher soll die DLL wissen, von wem sie benutzt wird und ob es da CEs bzw. konkret ein FlowLayoutPanel gibt? Dazu müsstest Du der DLL-Klasse bzw -Sub sagen, dass es das gibt. Indem Du das Formular bzw. seine Ziel-CEs der Klasse in der DLL als Parameter übergibst. Wäre der schnellste Weg.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Jo hab ich jetzt so gemacht funkt auch.
    Das Problem ist jetzt daran, dass ich das eigentlich so machen wollte dass andere Benutzer in ihren Programmen einen Verweis auf der DLL setzen können,
    und diese Sub in der DLL ausführen können. Nur das dann nicht der Button in Ihrer Form erstellt wird sondern in der "Hauptanwendung".

    Hoffe, das ich das verständlich beschreiben habe
    Quixo OS 2.1 das Virtuelle Betriebssystem : 50%

    Quixo OS 2.1 das Virtuelle Betriebssystem - Entwicklung geht weiter
    Webseite geupdatet schaut nun vorbei ;)
    Option Strict On nicht vergessen!
    Beschreib mal bitte ein vollständiges Konstrukt. Ich versteh grad nicht, was Du mit "ihrer Form" und "Hauptanwendung" meinst. Was ist der Unterschied? Beschreib das mal bitte konkret und was das am Ende werden soll.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Alles klar ich hab dir mal ein Bild gemalt :)
    Damit kann man es ambesten verstehen denke ich
    Bilder
    • DLLerklärung.png

      16,31 kB, 1.135×274, 29 mal angesehen
    Quixo OS 2.1 das Virtuelle Betriebssystem : 50%

    Quixo OS 2.1 das Virtuelle Betriebssystem - Entwicklung geht weiter
    Webseite geupdatet schaut nun vorbei ;)
    Option Strict On nicht vergessen!
    Neeneenee. Also, dass die DLL von der Hauptanwendung eingebunden wird und meinetwegen von der UserApp, ist zwar möglich, bringt Dir aber nix, da die effektiven Klasseninstanzen nicht dieselben sind. Andere Objekte eben. Aber selbst Shared oder sowas würde nicht klappen. Ich kann's zwar gerade nicht erklären, aber man kann nicht eine DLL so nutzen, dass sie auf diesem Wege andere Apps beeinflusst.* Was Du machen kannst bzw. was ich an Deiner Stelle machen würde: Die Apps selber müssen miteinander kommunizieren. Ob jetzt aber mit TCP oder NamedPipes** oder eben ggf., dass die UserApp eine Prozedur in der Hauptanwendung selber irgendwie auslöst, bleibt Dir überlassen. Die anderen Leser haben vielleicht noch bessere Vorschläge. Im schlimmsten Fall über Programmmanipulation - aber nur, wenn Dir gar nicht mehr anders zu helfen ist: Schau mal dazu hier und hier zum Thema »andere Programme auslesen und fernsteuern« rein.

    * Spekulatius: Unterschiedliche DLL-Laufzeitinstanzen?
    ** hab ich noch nie probiert, da ich mir noch nicht die Mühe gemacht habe, mich da reinzulesen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ah, okay schade. Also gibt es da echt keine Möglichkeit mit der DLL Methode?
    Quixo OS 2.1 das Virtuelle Betriebssystem : 50%

    Quixo OS 2.1 das Virtuelle Betriebssystem - Entwicklung geht weiter
    Webseite geupdatet schaut nun vorbei ;)
    Option Strict On nicht vergessen!
    @ClonkAndre Das Hauptprogramm instanziert die DLL und ruft Methoden in der DLL auf.
    Wenn die DLL was zu melden hat, gib ihr ein entsprechendes Event.
    Wenn das Hauptprogramm das Event aboniert, kann es darauf reagieren, andernfalls nicht.
    Das mit den Events funktioniert exakt so wie zwischen Instanzen von Fenstern: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Und wie würdest Du jetzt das Problem lösen, dass 2 Anwendungen laufen, die dieselbe DLL nutzen und App1 mithilfe* der DLL App2 mitteilen will, dass App2 einen Button erstellen soll, entsprechend Post#5? Normale Events funktionieren da ja nicht.

    * oder eben ohne Zuhilfenahme der DLL
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ein Server, bei dem man sich anmeldet und dann mit miteinander und / oder mit dritten kommuniziert.
    Wie Dein Post #6.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!