Objekte mittels externer DLL ändern

  • VB.NET

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

    Objekte mittels externer DLL ändern

    Abend,

    Folgendes: Ich habe 2 Formen -> "Main"-Form und "Settings"-Form <- und eine Funktion.dll mit funktionen.
    Die Main Form hat einen Button und ein Label. In der Settings Form befindet sich ebenfalls ein Button.

    Wenn ich nun den Button in der Main Form drücke wird die Funktion "Test_Funktion" aus der Funktion.dll ausgeführt.
    Die genannte Funktion wird auch bei dem Klick des Buttons aus der Settings-Form ausgeführt.

    Soweit so gut !!!

    Nun möchte ich aber das die genannte Funktion den Labeltext änder, egal welchen von beiden Buttons ich drücke.

    Wie realisiere ich das ? ?(

    Bin dankbar für Hilfestellungen. :thumbsup:
    Dass die DLL den Text auf der Form ändert? Das wird schwer. Eine Option wäre aber, dass die Funktion einen Text zurückgibt, die den Text enthält, der auf dem Label angezeigt wird. Sonst müsstest du eine Plug-In-Schnittstelle implementieren und das ist weder einfach noch für kleinere Projekte lohnenswert.

    Swoopo schrieb:

    egal welchen von beiden Buttons ich drücke.
    Dann sollte die Funktion ein Event auslösen, und in der Event-Handler-Routine setzt Du den Text.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du stellst in deiner DLL eine Reihe von Events bereit, die die entsprechenden Parameter haben bspw:

    VB.NET-Quellcode

    1. Public Class XYZ
    2. Event OnSubXYFinished(ByVal labeltext As String)
    3. Public Sub XY()
    4. 'mach was
    5. RaiseEvent OnSubXYFinished("hallo")
    6. End Sub
    7. End Class


    Diese Events abonnierst du dann an den Stellen, wo du sie brauchst bspw in deiner Form-Klasse. In der Handler-Sub kannst du dann einfach den Labeltext ändern.
    Allgemein ist es nie gut von Klassen in die GUI reinzupfuschen, dafür nutzt man Events. Das ist einfacherer, sauberer und vorallem übersichtlicher.

    LG

    ChOoSeMyNaMe schrieb:

    eine Reihe von Events
    sollten dann allerdings die Standard-Signatur haben:

    VB.NET-Quellcode

    1. Public Event OnSubXYFinished(sender As Object, e As AnyEventArgs)
    In den von EventArgs abgeleiteten AnyEventArgs kannst Du dann alle Daten reinpacken.
    ----
    @Swoopo VB6 oder VB.NET?
    Falls VB6: Zurück zu Feld Nr. 1.
    Falls VB.NET: Ändere bitte den Titel dieses Threads.
    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).
    Programmierfragen über PN / Konversation werden ignoriert!

    Swoopo schrieb:

    gutes Tutorial ?
    Selber rauskriegen?
    Projekt: Form mit Button, Class1. Ob das Event nun aus der Klasse im Projekt oder aus der DLL kommt, ist völlig egal.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents myInstance As Class1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.myInstance = New Class1
    5. End Sub
    6. Private Sub MyEventHandler(sender As Object, e As MyEventArgs) Handles myInstance.MyEvent
    7. MessageBox.Show(e.Value.ToString)
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. Me.myInstance.DoIt()
    11. End Sub
    12. End Class

    VB.NET-Quellcode

    1. Public Class Class1
    2. Public Event MyEvent(sender As Object, e As MyEventArgs)
    3. Public Sub DoIt()
    4. For i = 1 To 10
    5. If i = 5 Then
    6. RaiseEvent MyEvent(Me, New MyEventArgs(i))
    7. End If
    8. Next
    9. End Sub
    10. End Class
    11. Public Class MyEventArgs
    12. Inherits EventArgs
    13. Public Property Value As Integer
    14. Public Sub New(val As Integer)
    15. Me.Value = val
    16. End Sub
    17. End Class

    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).
    Programmierfragen über PN / Konversation werden ignoriert!