0
在我的測試中,我看到SelectedIndexChanged
總是在選項卡控件的Click
之前觸發。在選項卡中保證「SelectedIndexChanged」總是在「點擊」之前觸發?
我的問題:
這種行爲由.NET Framework保證,還是那裏的Click
事件第一次被觸發的情況呢?到目前爲止,我沒有發現關於文檔中的調用訂單的任何內容。
在我的測試中,我看到SelectedIndexChanged
總是在選項卡控件的Click
之前觸發。在選項卡中保證「SelectedIndexChanged」總是在「點擊」之前觸發?
我的問題:
這種行爲由.NET Framework保證,還是那裏的Click
事件第一次被觸發的情況呢?到目前爲止,我沒有發現關於文檔中的調用訂單的任何內容。
您可以檢查控制TabControl的source code。
基本上SelectedIndexChanged
在TabControl
的WndProc
中被觸發。
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...
}
}
調試與驗收。未來檢查源代碼的好主意。謝謝! –