在选项卡“SelectedIndexChanged"”中得到保证;总是触发"点击"
本文关键字:quot 点击 选项 SelectedIndexChanged | 更新日期: 2023-09-27 18:07:57
在我的测试中,我看到SelectedIndexChanged
总是在选项卡控件的Click
之前触发。
我的问题:
这种行为是由。net框架保证的,还是有Click
事件首先触发的情况?到目前为止,我没有发现文档中有任何关于调用顺序的说明。
可以查看控件TabControl的源代码。
基本上SelectedIndexChanged
在TabControl
的WndProc
中被触发。
OnClick
在Control基类的WndProc
中被触发。
基本的WndProc
在TabControl
的WndProc
的末尾被调用(它是最后一条指令),所以SelectedIndexChanged
总是在Click
事件之前被触发。
TabControl的指向
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
}
控件的指向
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...
}
}