找回密码
 立即注册

QQ登录

只需一步,快速开始

dafeng520

论坛元老

19

主题

74

帖子

7661

积分

论坛元老

积分
7661

活字格认证

dafeng520
论坛元老   /  发表于:2013-12-10 08:31  /   查看:10925  /  回复:16
现开发了多窗体程序,在两窗体间切换时,事件触发顺序应该为windowActive,controlActive。
我在使用C1TabControl时,发现是先触发SelectionChanged事件,然后再window激活。别的控件事件触发顺序则正常。
请问,如何实现先window激活事件,后SelectionChanged事件?
谢谢!

16 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2013-12-10 16:37:00
沙发
回复 1楼dafeng520的帖子

dafeng520 你好,

我通过附件 Demo 测试,调用子 Form 时。首先触发 Form2_Activated 事件,然后才触发的 c1DockingTab1_SelectedIndexChanged 事件,所以没能重现你的问题,请参考:



如果不能解决问题,请上传 Demo 到论坛调试。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
dafeng520
论坛元老   /  发表于:2013-12-10 16:51:00
板凳

你好,我的是wpf的例子,你先新增两个窗体,然后测试。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-12-10 18:21:00
地板
回复 3楼dafeng520的帖子

感谢发送demo,问题正在调查中,明天回复。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-12-11 13:22:00
5#
回复 3楼dafeng520的帖子

dafeng520 你好,
能否补发图中三个缺少的 DLL:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
dafeng520
论坛元老   /  发表于:2013-12-11 19:16:00
6#

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-12-12 14:53:00
7#
回复 6楼dafeng520的帖子

dafeng520 你好,
可以通过以下代码判断当前UserControl是否加载完:

  1.         private void C1TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
  2.         {
  3.             if (this.IsLoaded)
  4.             {
  5.                 Debug.Print("C1TabControlClicked  " + (sender as C1TabControl).SelectedIndex + ":" + title);
  6.             }
  7.         }
复制代码
回复 使用道具 举报
dafeng520
论坛元老   /  发表于:2013-12-13 08:31:00
8#
经测试,此方法不能解决问题啊。
WindowActivated:test1848543519
btnClicked:test1848543519
WindowActivated:test1240895648
btnClicked:test1240895648

C1TabControlClicked  1:test1848543519
WindowActivated:test1848543519
C1TabControlClicked  1:test1240895648
WindowActivated:test1240895648
C1TabControlClicked  0:test1848543519
WindowActivated:test1848543519

上面显示出,先触发了窗体事件,后触发控件事件。
下面显示出,在C1TabControl中,是先触发控件事件,后触发了窗体事件。(此处Tab是切换了的)。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-12-13 11:27:00
9#
回复 8楼dafeng520的帖子

事件触发顺序我们可能没法办法更改。使用 7# 中的代码的作用是判断当前 UC 是否加载完成,如果未加载则不执行C1TabControl_SelectionChanged 中的代码。
附件是我的操作行为,切换 Tab 后并没有触发WindowActivated事件,请查看,看我们操作有哪些不同,我再继续跟踪调查:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
dafeng520
论坛元老   /  发表于:2013-12-13 13:58:00
10#
你好,你没有理解我的意思,当我打开两个窗口后,先把两个窗体平铺开来,当win1处于激活状态时,直接点击win2里的TabControl控件,而不是先使win2激活。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部