2016-09-21 62 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

调试与验收。未来检查源代码的好主意。谢谢! –

相关问题