Frage

Im Grunde habe ich eine benutzerdefinierte Kind Form-Klasse, die Ereignisse hat, die an die Eltern weitergegeben werden. In der benutzerdefinierten Kind Form habe ich eine Erklärung einer „MustInherit“ Klasse, die erbt die DevExpress User Control Klasse.

Der Grund hierfür ist ich viele Bedienelemente haben, die von dieser Basisklasse ableiten, und das Kind Form eine Instanz einer dieser Kontrollen haben kann, und tut Sorgfalt, die. Die einzige Voraussetzung ist, dass das Kind Form die gleiche Art und Weise die gleichen Ereignisse von jeder Art der Steuerung verarbeiten kann.

Einige verwässerte Code-Schnipsel (noch ziemlich lange leider):

'''Inherited Class
Public Class ChildControlInheritedClass
    'A Button Click event that starts the chain of events.
    Private Sub btnMoveDocker_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvertToTab.Click
        OnMoveToDocker(Me, New ChildGridMoveArgs(Me))
    End Sub
End Class

'''Base Class
Public MustInherit Class ChildControlBaseClass
    Inherits DevExpress.XtraEditors.XtraUserControl
    Public Class ChildGridMoveArgs
        Inherits System.EventArgs
        Public Sub New(ByVal _ChildControl As ChildControlInheritedClass)
            ChildControl = _ChildControl
        End Sub
        Public ChildControl As ChildControlInheritedClass
    End Class
    Public Event MoveToDocker(ByVal sender As Object, ByVal e As ChildGridMoveArgs)
    Protected Overridable Sub OnMoveToDocker(ByVal sender As Object, ByVal e As ChildGridMoveArgs)
        '''Once this RaiseEvent is fired, nothing happens. The child form is oblivious.
        RaiseEvent MoveToDocker(sender, e)
    End Sub
End Class

'''Child Form Class
Public Class ChildForm
    Private WithEvents cgChild As ChildControlBaseClass
    Public Property ChildGrid() As ChildControlInheritedClass
        Get
            Return cgChild
        End Get
        Set(ByVal value As ChildControlInheritedClass)
            RemoveHandler cgChild.MoveToDocker, AddressOf cgChild_MoveToDocker
            cgChild.Dispose()
            cgChild = Nothing
            cgChild = value
            AddHandler cgChild.MoveToDocker, AddressOf cgChild_MoveToDocker
        End Set
    End Property
    Public Event MoveToDocker(ByVal sender As Object, ByVal e As ChildControlInheritedClass.ChildGridMoveArgs)
    Public Sub cgChild_MoveToDocker(ByVal sender As Object, ByVal e As ChildControlInheritedClass.ChildGridMoveArgs)
        RaiseEvent MoveToDocker(sender, New ChildControlInheritedClass.ChildGridMoveArgs(cgChild))
    End Sub
End Class

Public Class frmMain
    Private Sub OpenNewWindow()
        Dim frm As New ChildForm
        Dim chld As New ChildControlInheritedClass
        frm.ChildGrid = chld
        frm.Show()
    End Sub
End Class

Auf den Punkt gebracht, das ist, wie ich gemacht, das Kind Form und wie alles an Arbeit annehmen. Aber wenn ich den Knopf in der vererbten Kind Steuerung drücke, wird das Ereignis nur so weit, als die Basisklasse erhält und durchquert nie die Raise in das Kind Form, das ist das Ereignis behandeln annehmen.

Bin ich auch in dem Baseballstadion hier?

Vielen Dank für das Lesen!

War es hilfreich?

Lösung

Sie haben Ihr Event-Handle hinzufügen von AddHandler oder Griffe Bezeichner verwenden. Siehe unten unter Verwendung des Handles cgChild.MoveToDocker Kennung.


Public Class ChildForm
    ...
    Public Sub cgChild_MoveToDocker(ByVal sender As Object, ByVal e As ChildControlInheritedClass.ChildGridMoveArgs) Handles cgChild.MoveToDocker
        RaiseEvent MoveToDocker(sender, New ChildControlInheritedClass.ChildGridMoveArgs(cgChild))
    End Sub
End Class

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top