2014-01-07 46 views
0

我見過的每個樣本都是關於鼠標點擊的,然後這個例子是一樣的。在vb.net我如何提高另一個控件的事件

我需要在另一個控件上專門引發一個事件。

我有一個事件的小組,我是這樣創建的:

Private FlowPanel as new my_FlowLayoutPanel 
Addhandler FlowPanel.change, addressof doChange 

    Public Class my_FlowLayoutPanel 
      Inherits FlowLayoutPanel 

      Public Event change(ByVal sender As Object) 
      Public Const Ver_SCROLL As Integer = &H115 

      Protected Overrides Sub WndProc(ByRef m As Message) 
       If m.Msg = Ver_SCROLL Then 
        RaiseEvent change(Me) 
       End If 

       MyBase.WndProc(m) 
      End Sub 
     End Class 

所以,當垂直滾動條動作,「變」的事件觸發。

所以現在,我還有一個控制,(一個簡單的面板)設置是這樣的:

Public Class view_Panel 
     Inherits System.Windows.Forms.Panel 

     Protected Overrides Sub WndProc(ByRef m As Message) 

      Const NCMOUSEMOVE As Integer = &H200 

      If m.Msg = NCMOUSEMOVE Then 

       ' *** FIRE THE "CHANGE" EVENT ON THE FLOWLAYOUT PANEL 

      End If 
      MyBase.WndProc(m) 
     End Sub 

    End Class 

所以,我怎麼火從view_Panel「更改」事件?

+0

這些控件如何在表單上相互關聯? – StingyJack

+0

my_FlowLayoutPanel駐留在哪裏? – StingyJack

回答

0

編輯 打電話給你的事件從另一個類,你可以使用反射

MethodInfo onchange = YourClassInstance.GetType().GetMethod("OnChange",    System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 
    onChange.Invoke(YourClassInstance, new object[] { new EventArgs() }); 
+0

雖然是一篇很好的文章,但並沒有提到其他控件的事件。 – user2721815

+0

看看步驟2和步驟3在我的更新回答中 –

+0

您剛剛通過在此複製文章來複制文章。複製之後,沒有任何改變。所以我的問題仍然存在:在我的程序中插入什麼代碼,它說「'***在FLOWLAYOUT面板上」更改「事件」? – user2721815

0

你可能想是這樣的:

Case WM_HSCROLL 
    RaiseEvent Scroll(Me, New ScrollEventArgs(ScrollEventType.EndScroll, _ 
      Win32.GetScrollPos(Me.Handle, Win32.SBOrientation.SB_HORZ), _ 
      ScrollOrientation.HorizontalScroll)) 

Case WM_VSCROLL 
    RaiseEvent Scroll(Me, New ScrollEventArgs(ScrollEventType.EndScroll, _ 
      Win32.GetScrollPos(Me.Handle, Win32.SBOrientation.SB_VERT), _ 
      ScrollOrientation.VerticalScroll)) 

ScrollEventArgs是一個標準的網絡事件,所以我們不需要定義它。然後聲明該事件爲(「變」似乎是一個非常糟糕的選擇):

Public Event Scroll(ByVal sender As Object, ByVal sa As ScrollEventArgs) 

如果你的小組需要做一些事情的情況下,使用OnScroll方法,這使得面板爲最終用戶之前做的東西獲取事件:

Protected Overrides Sub OnScroll(ByVal sa As ScrollEventArgs) 
    ... do stuff 
    ' in cases where you no longer need the event to be passed 
    ' on, dont call this: 
    MyBase.OnScroll(e) 
End Sub 

使用方法:

既然你子類均,讓面板提高的情況下,FlowPanel可以監控這些事件(訂閱面板的滾動事件),並在該,做任何事你打算在Change。由於ACTION發生在面板上或面板上,所以最好在那裏處理。

相關問題