Funktionsaufruf mit eigenem Steuerelement

Arijane

Mitglied
Hallo zusammen !

ich hoffe einer von Euch kann mir mit meinem Problem weiterhelfen....

Und zwar möchte ich mit einem UserControl eine Funktion einer Form aufrufen. Control und Form sollen aber ansonsten nichts miteinander zu tun haben, und getrennt voneinander erstellt werden.

Das sauberste wäre vermutlich, die Funktion in eine einzelne Klasse zu legen, aber das wäre ein unglaublicher Aufwand...

Für diese Funktion müssten 4 Integer Werte übergeben werden. Weiß jemand Rat ?

Viele Grüße
Ariane
 
Du könntest dem Control einen Event spendieren der die Werte in den EventArgs übergibt, den von der Form abonieren und darauf dann reagieren.

Stichwort: "EventHandler"
 
Hallo!
Ich würde mal behaupten dass der Aufwand dies in eine eigene Kasse zu *verlegen* mitnichten ein großer ist.
Aber ich mutmaße wieder, ich kenne den Code ja nicht.
Du könntest in der Form worin sich die Methode/Funktion befindet diese als public static deklarieren.
Somit brauchst du keine Instanz des Formulars und könntest die direkt über den Namespace ansprechen.

Ich würde dir aber trotzdem empfehlen solch *allgemein genutzte* Methoden/Funktionen in eigene Klassen mit eigenem Namespace zu legen.
Du wirst je größer das Projekt wird mehr Konfusion reinbringen wenn du nicht
von beginn an sauber Strukturierst und geordnet vorgehst.

Edith meint: hach da war einer schneller -- Eventhandler ist natürlich viel eleganter!! ;-)
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort !

EventHandler hört sich GROSSARTIG an, ist allerdings komplizierter als befürchtet.

Ich habe nun etliche MSDN-Hilfe-Seiten dazu gelesen, komme aber nicht so recht vorwärts. Vielleicht könnte sich das mal jemand anschauen: ()

Mein "TestControl" ist ein Benutzersteuerelement auf dem lediglich EIN Button abgelegt ist. der Programmcode wird zwar durchlaufen, aber auf der Form ändert sich nichts.

'______________DAS ALLES STEHT IM USER_CONTROL__________
Code:
Class TestControl
    Public Event EventStart(ByVal sender As Object, ByVal e As StartEventArgs)
    Public Sub GenerateEvent()
        Dim Args As New StartEventArgs(1)
        RaiseEvent EventStart(Me, Args)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        GenerateEvent()
    End Sub
End Class

Public Class StartEventArgs
    Inherits System.EventArgs
    Public Wert As Integer = 1
    Public Sub New(ByVal W As Integer)
        MyBase.New()
        Wert = W
    End Sub
End Class´

'_________________UND DAS STEHT AUF DER FORM________________
_____auf der nun der Button des Benutzersteuerelements und ein Label platziert ist__
Code:
Public Class Form1
    Friend WithEvents MySender As TestControl
    Private Sub MySender_Start(ByVal sender As Object, ByVal e As StartEventArgs) Handles MySender.EventStart
        Label1.Text = e.Wert.ToString
    End Sub
End Class

Das Programm springt nicht in den Code der Form...Weiß jemand weiter
Danke !
Arijane
 
Ich hab's! Zwar ohne eigenes EventArgs - dafür mit Delegaten :)
Bestimmt gehts auch schöner, aber für meine Zwecke ist das erst einmal ausreichend. Für alle die die danach suchen:

Auf das UserControl einen Button legen und
Code:
Public Class UserControl1
    Public Delegate Sub OnButtonClick(ByVal XDS As String)
    Public Event btnHandler As OnButtonClick
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RaiseEvent btnHandler("87")
    End Sub
End Class

Auf die Form ein Label das besagte UserControl legen und:
Code:
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler UserControl11.btnHandler, AddressOf Texttest
    End Sub
    Private Sub Texttest(ByVal XDS As String) 'Handles mySender.btnHandler
        Me.Label1.Text = XDS
    End Sub
End Class

Wunderbar !
Arijane
 

Neue Beiträge

Zurück