私は、その上に構築しようとしている他の複合ユーザーコントロールのベースを形成するユーザーコントロールを持っています。その基本コントロール内に、それに関連するonchangeイベントを含む以下に定義されたプロパティがあります。
Private _themeToUse As String
Public Property ThemeToUse As String
Get
Return _themeToUse
End Get
Set(ByVal value As String)
_themeToUse = value
RaiseEvent ThemeToUseOnChange(Me, EventArgs.Empty)
End Set
End Property
Public Event ThemeToUseOnChange(ByVal sender As Object, ByVal e As EventArgs)
Private Sub ThemeChanging(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ThemeToUseOnChange
ThemeController.Theme = ThemeToUse
End Sub
私が理解しようとしているのは、この基本コントロールを自分自身が継承するコントロールとして使用する新しいユーザーコントロールが、onchangeイベントをどのように利用できるかということです。
インテリセンスが「シャドウ」の使用を提案した後、基本コントロールを継承している新しいコントロールに次のものを追加しようとしましたが、起動されていないようです。
Shadows Event ThemeToUseOnChange(ByVal sender As Object, ByVal e As EventArgs)
Private Sub ThemeChanging(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ThemeToUseOnChange
C1ThemeController1.Theme = ThemeToUse
End Sub
誰かが私がこの種のことを適切に行うべき方法を教えてもらえますか?
ありがとう
これを基本クラスと見なしてください。
Public Class First
Public Event ThemeToUseChanged As EventHandler
Public Event ThemeToUseChanging As EventHandler
Public Property ThemeToUse() As String
Get
Return Me.m_themeToUse
End Get
Set(ByVal value As String)
If (value <> Me.m_themeToUse) Then
Me.OnThemeToUseChanging(EventArgs.Empty)
Me.m_themeToUse = value
Me.OnThemeToUseChanged(EventArgs.Empty)
End If
End Set
End Property
Protected Overridable Sub OnThemeToUseChanged(ByVal e As EventArgs)
If (Not Me.ThemeToUseChangedEvent Is Nothing) Then
Me.ThemeToUseChangedEvent.Invoke(Me, e)
End If
End Sub
Protected Overridable Sub OnThemeToUseChanging(ByVal e As EventArgs)
If (Not Me.ThemeToUseChangingEvent Is Nothing) Then
Me.ThemeToUseChangingEvent.Invoke(Me, e)
End If
End Sub
Private m_themeToUse As String
End Class
そして、このクラスはクラスからすべてを継承しますFirst
。
Public Class Second
Inherits First
End Class
これで、各オブジェクトのThemeToUseChanged
イベントとイベントの両方にハンドルを追加できThemeToUseChanging
ます。
Public Class Form1
Public Sub New()
Me.InitializeComponent()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Test:
Me._first.ThemeToUse = New Guid().ToString()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'Test:
Me._second.ThemeToUse = New Guid().ToString()
End Sub
Private Sub ThemeToUseChanged(sender As Object, e As EventArgs) Handles _first.ThemeToUseChanged, _second.ThemeToUseChanged
If (sender Is Me._first) Then
'ThemeToUseChanged changed of type `First`
ElseIf (sender Is Me._second) Then
'ThemeToUseChanged changed of type `Second`
End If
End Sub
Private Sub ThemeToUseChanging(sender As Object, e As EventArgs) Handles _first.ThemeToUseChanging, _second.ThemeToUseChanging
If (sender Is Me._first) Then
'ThemeToUseChanging changed of type `First`
ElseIf (sender Is Me._second) Then
'ThemeToUseChanging changed of type `Second`
End If
End Sub
Private WithEvents _first As New First
Private WithEvents _second As New Second
End Class
そして、Third
クラスが継承すると考える場合Second
:
Public Class Third
Inherits Second
End Class
これは、継承チェーンをループする方法です。
Dim obj As First = New Third()
Dim t As Type = obj.GetType()
Do
MsgBox(t.FullName)
t = t.BaseType
Loop Until (t.BaseType Is Nothing)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加