2016-09-21 67 views

回答

1

您可以檢查控制TabControl的source code

基本上SelectedIndexChangedTabControlWndProc中被觸發。

OnClick在基本Control類的WndProc中被觸發。

基礎WndProc被稱爲在TabControl(這是最後一條指令)的WndProc結束,所以SelectedIndexChanged總會被Click事件之前發射。

這裏的代碼片段涉及:

的TabControl的WndProc

protected override void WndProc(ref Message m) { 
    switch (m.Msg) { 
     // Something... 
     case NativeMethods.WM_REFLECT + NativeMethods.WM_NOTIFY: 
      NativeMethods.NMHDR nmhdr = (NativeMethods.NMHDR) m.GetLParam(typeof(NativeMethods.NMHDR)); 
      switch (nmhdr.code) { 
       case NativeMethods.TCN_SELCHANGE: 
        if (WmSelChange()) // Here will fire the event { 
         m.Result = (IntPtr)1; 
         tabControlState[TABCONTROLSTATE_UISelection] = false; 
         return; 
        } 
        else { 
         tabControlState[TABCONTROLSTATE_UISelection] = true; 
        } 
        break; 
      } 
      break; 
    } 
    // Something... 
    base.WndProc(ref m); // The Control WndProc 
} 

控制的WndProc

protected virtual void WndProc(ref Message m) { 
    // Something... 
    switch (m.Msg) { 
     // Something... 
     case NativeMethods.WM_LBUTTONUP: 
      WmMouseUp(ref m, MouseButtons.Left, 1); // Here will fire Click event 
      break; 
     // Something... 
    } 
} 
+0

調試與驗收。未來檢查源代碼的好主意。謝謝! –

相關問題