2015-11-03 60 views
-1

我知道有很多關於上述的信息,但我不知道如何正確地做到這一點,所以我認爲使用現實生活中的問題可能有助於爲我點擊它,其他。VB - 正確地從其他課程提高活動

因此,在A類我已經定義了一個事件方法

Public Sub textChangedMethod(ByVal textedChanged As Boolean) 
    ' do some code on properties of this class only 
End Sub 

我需要發生的事情是我需要一些其他的類,以提高這種方法,

我有一個概念,但它完全錯誤的。

目前我通過A類的實例向另一個類,因此可以參考(這肯定是錯誤的

Dim UI As New newClassDialog(Me) 'class A 

在這個新類的事件我有事件處理程序

Public Event textChanged(ByVal textedChanged As Boolean) 

於是在新類的構造函數我現在可以添加處理程序

Public Sub New(ByRef classA As Class A) 

    ' This call is required by the designer. 
    InitializeComponent() 

    AddHandler textChanged, AddressOf classA.textChangedMethod 

End Sub 

現在,我當然可以提出像這樣

RaiseEvent textChanged(True) 

基本上通過在課堂上顯得很荒謬了我的眼睛,所以使用這個例子是有這樣做的「正確」的方式活動?

謝謝

+0

沒有很多方面還有的責任和文本合併了*提高*事件和*消費*一個小事件('Public Sub textChangedMethod'不是一個事件定義,而是一個事件處理程序)。這聽起來像是你正在從這個第二課的A級事件中冒出來。這些將有助於知道(我懷疑一個或多個是一種形式)。 – Plutonix

回答

1

看來你是顛倒角色。在這種情況下,引發事件的班級不應該知道誰來處理事件。它是類的那個實例化newClassDialog添加的事件處理程序被調用的類引發的事件

Dim UI As New newClassDialog(Me) 
AddHandler UI.textchanged, AddressOf Me.textChangedMethod 
+0

謝謝 - 現在我更好了,我沒有發送該類,並且在newClassDialog類中創建了公共事件,所以我只需要從該類中提起事件,我明白,謝謝。 – user3428422

+0

我會從代碼中刪除'(Me)',因爲它錯誤地表明您需要通過該類! – user3428422

+0

通過構造函數發送類也是錯誤的,因爲只有類的實例(或派生類)可以處理該事件。它將引發事件的類耦合到特定類型。 – Steve