プロパティ変更イベントを継承ラダーまで「追跡」するにはどうすればよいですか

ドムシンクレア

私は、その上に構築しようとしている他の複合ユーザーコントロールのベースを形成するユーザーコントロールを持っています。その基本コントロール内に、それに関連する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

誰かが私がこの種のことを適切に行うべき方法を教えてもらえますか?

ありがとう

Bjørn-RogerKringsjå

これを基本クラスと見なしてください。

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]

編集
0

コメントを追加

0

関連記事

分類Dev

ミックスパネルのタイムイベントをプロパティで追跡するにはどうすればよいですか?

分類Dev

Azure App Insightで、App Centerから追跡されたイベントのプロパティを取得するにはどうすればよいですか?

分類Dev

AEM 6.2でページプロパティを継承するにはどうすればよいですか?

分類Dev

イベントをトリガーした要素を渡し、そのプロパティを変更するにはどうすればよいですか?

分類Dev

コピー/貼り付けでクラッシュしないプロキシを使用してtkinterテキストウィジェットが変更されたかどうかを追跡するにはどうすればよいですか?

分類Dev

継承されたコントロールのプロパティとしてTextFormatFlagsを使用するにはどうすればよいですか?

分類Dev

GoogleアナリティクスでGoogle視覚化チャートイベントを追跡するにはどうすればよいですか?

分類Dev

Wacom Tabletのホバーイベントを追跡するにはどうすればよいですか?

分類Dev

C#で継承のプロパティを使用するにはどうすればよいですか?

分類Dev

cssで子供のプロパティを継承するにはどうすればよいですか?

分類Dev

cssで子供のプロパティを継承するにはどうすればよいですか?

分類Dev

継承を含むArrayListsにプロパティを追加するにはどうすればよいですか?

分類Dev

コンポーネントからコントローラーのプロパティを変更するにはどうすればよいですか?

分類Dev

コンポーネントからコントローラーのプロパティを変更するにはどうすればよいですか?

分類Dev

jQueryのヘッダープロパティを変更するにはどうすればよいですか?

分類Dev

Wordで追跡された変更-サイドパネルなしでマークアップを印刷するにはどうすればよいですか?

分類Dev

クリックイベントでAngular4プロパティを変更するにはどうすればよいですか?

分類Dev

継承されたプロパティをEFデータストアに動的に追加するにはどうすればよいですか?

分類Dev

Djangoテンプレートで継承されたコンテナをオーバーライドするにはどうすればよいですか?

分類Dev

Djangoテンプレートで継承されたコンテナをオーバーライドするにはどうすればよいですか?

分類Dev

iOSでin_app_purchaseFirebaseイベントの追跡を停止するにはどうすればよいですか?

分類Dev

AngularJSでイベントを追跡するにはどうすればよいですか?

分類Dev

プロパティファイルに応じてクライアントのURLを変更するにはどうすればよいですか?

分類Dev

イベントが送信された回数を追跡するにはどうすればよいですか?

分類Dev

SQL ServerデータベースプロジェクトでFKのプロパティを変更するにはどうすればよいですか?

分類Dev

Xamarinフォームの別のContentPageからプライベートフィールドプロパティにアクセス/継承するにはどうすればよいですか?

分類Dev

基本クラス[継承]に属する子クラスオブジェクトのプロパティ(属性)を設定するにはどうすればよいですか?(ベースの属性を子に渡す)

分類Dev

ブランチが追跡しているリモートを変更するにはどうすればよいですか?

分類Dev

Dynamics 365のすべてのエンティティの変更追跡を有効にするにはどうすればよいですか?

Related 関連記事

  1. 1

    ミックスパネルのタイムイベントをプロパティで追跡するにはどうすればよいですか?

  2. 2

    Azure App Insightで、App Centerから追跡されたイベントのプロパティを取得するにはどうすればよいですか?

  3. 3

    AEM 6.2でページプロパティを継承するにはどうすればよいですか?

  4. 4

    イベントをトリガーした要素を渡し、そのプロパティを変更するにはどうすればよいですか?

  5. 5

    コピー/貼り付けでクラッシュしないプロキシを使用してtkinterテキストウィジェットが変更されたかどうかを追跡するにはどうすればよいですか?

  6. 6

    継承されたコントロールのプロパティとしてTextFormatFlagsを使用するにはどうすればよいですか?

  7. 7

    GoogleアナリティクスでGoogle視覚化チャートイベントを追跡するにはどうすればよいですか?

  8. 8

    Wacom Tabletのホバーイベントを追跡するにはどうすればよいですか?

  9. 9

    C#で継承のプロパティを使用するにはどうすればよいですか?

  10. 10

    cssで子供のプロパティを継承するにはどうすればよいですか?

  11. 11

    cssで子供のプロパティを継承するにはどうすればよいですか?

  12. 12

    継承を含むArrayListsにプロパティを追加するにはどうすればよいですか?

  13. 13

    コンポーネントからコントローラーのプロパティを変更するにはどうすればよいですか?

  14. 14

    コンポーネントからコントローラーのプロパティを変更するにはどうすればよいですか?

  15. 15

    jQueryのヘッダープロパティを変更するにはどうすればよいですか?

  16. 16

    Wordで追跡された変更-サイドパネルなしでマークアップを印刷するにはどうすればよいですか?

  17. 17

    クリックイベントでAngular4プロパティを変更するにはどうすればよいですか?

  18. 18

    継承されたプロパティをEFデータストアに動的に追加するにはどうすればよいですか?

  19. 19

    Djangoテンプレートで継承されたコンテナをオーバーライドするにはどうすればよいですか?

  20. 20

    Djangoテンプレートで継承されたコンテナをオーバーライドするにはどうすればよいですか?

  21. 21

    iOSでin_app_purchaseFirebaseイベントの追跡を停止するにはどうすればよいですか?

  22. 22

    AngularJSでイベントを追跡するにはどうすればよいですか?

  23. 23

    プロパティファイルに応じてクライアントのURLを変更するにはどうすればよいですか?

  24. 24

    イベントが送信された回数を追跡するにはどうすればよいですか?

  25. 25

    SQL ServerデータベースプロジェクトでFKのプロパティを変更するにはどうすればよいですか?

  26. 26

    Xamarinフォームの別のContentPageからプライベートフィールドプロパティにアクセス/継承するにはどうすればよいですか?

  27. 27

    基本クラス[継承]に属する子クラスオブジェクトのプロパティ(属性)を設定するにはどうすればよいですか?(ベースの属性を子に渡す)

  28. 28

    ブランチが追跡しているリモートを変更するにはどうすればよいですか?

  29. 29

    Dynamics 365のすべてのエンティティの変更追跡を有効にするにはどうすればよいですか?

ホットタグ

アーカイブ