2017-07-14 74 views
0

當我創建像自定義處理程序:部隊自定義事件處理程序首先

Public Class MyCustomClass 
    Public Sub AddHandlers() 
     AddHandler Form1.MouseMove, AddressOf MoveMouse 
    End Sub 
    Private Sub MoveMouse(sender As Object, e As MouseEventArgs) 
     MsgBox("Needs to happen first.") 
    End Sub 
End Class 

我需要MoveMouse在這個類當用戶在Form1的將鼠標移動任何其他事件之前觸發。

Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove 
    MsgBox("Needs to happen second.") 
End Sub 

在寫這個,我意識到我可以在Form1的類再創建一個自定義事件處理程序,但沒有任何其他的方式,以確保MoveMouse(不管它是什麼類)Form1_MouseMove之前發生?

Thanks- 〜尼克

+0

要添加處理同一事件 - 2個處理程序是毫無意義的同一事件 - 只需將代碼添加到現有的事件。請注意'AddHandler'添加一個處理程序(!),因此已經存在的處理程序將首先觸發。 – Plutonix

+0

我知道。這是假設有一個理由有2個處理程序。我打算做一個應用程序擴展文件,它將處理表格中的某些事件,但要求它們先發射。 – NinjaNic

+0

我不知道什麼是'應用程序擴展',但事件是私人的形式同一個應用程序的其他部分甚至不知道他們:'Private Sub MoveMouse(...)' – Plutonix

回答

1

活動都在其聲明的順序觸發:

所以,如果你希望你的自定義類到Form1之前在Form1上提高MouseMove提出你需要的事件使您的自定義類中添加處理第一:

Public Class CustomClass 
    Public Sub OnMouseMoved(sender As Object, e As MouseEventArgs) 
     Console.WriteLine("Custom mouse moved") 
    End Sub 
End Class 

Public Class Form1 
    Public Custom As CustomClass 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Custom = New CustomClass 
     AddHandler MouseMove, AddressOf Custom.OnMouseMoved 
     AddHandler MouseMove, AddressOf OnMouseMoved 
End Sub 

    Private Sub OnMouseMoved(sender As Object, e As MouseEventArgs) 
     Console.WriteLine("Form1 mouse moved") 
    End Sub 
End Class 
+0

這或多或少是我在尋找的東西,但更多的只是讓人放心,除了您使用的「AddHandler」的順序之外,沒有其他因素可以起作用。 – NinjaNic

+0

@NinjaNic:不是,不。它或多或少[**結合**](https://msdn.microsoft.com/en-us/library/30cyx32c(v = vs.110).aspx)代表(事件處理程序)添加它們時,從而使您添加的第一個被首先調用。 –

相關問題