C#Winforms在专注于儿童控制时会失去注意力..有时
本文关键字:失去 注意力 有时 控制 专注 于儿童 C#Winforms | 更新日期: 2023-09-27 18:27:30
我正在开发一个windows mobile 6.5应用程序,在关注添加到表单中的UserControl的子控件时,我的表单有时会失去焦点。
在我的应用程序中,我通过向主窗体控件集合添加和删除用户控件来在屏幕之间导航。
IView nextView = (IView)Activator.CreateInstance(map.View);
this.Controls.Remove((UserControl)this.currentView);
this.currentView = nextView;
this.Controls.Add((UserControl)this.currentView);
因此,我在屏幕之间导航的基本流程是:
首次添加UserControl A
- 初始化UserControl A
- 将UserControl A添加到Form.Controls
- 关注A上的网格
导航到UserControl B
- 初始化UserControl B
- 从Form.Controls中删除UserControl A
- 将UserControl B添加到Form.Controls
导航回UserControl A
- 初始化UserControl A
- 从Form.Controls中删除UserControl B
- 将UserControl A添加到Form.Controls
- 关注A上的网格
所有这些工作都很好,在第一次添加UserControl A时,表单是有焦点的,子控件也有焦点。
但是,当我从UserControl B导航回UserControl A时,表单会失去焦点,但前提是我在最后一步尝试将焦点集中在子控件上。在我的应用程序中,这导致我无法使用手机硬件按钮在网格中导航。
你知道为什么主形式会失去焦点吗?
结果是,当我导航回UserControl A时,通过在方法中间触发导航事件,UserControl B中的代码继续执行,从而阻止了对UserControl A的关注。
我曾希望,当我从Form.Controls中删除UserControlB(然后处理它)时,该方法的其余部分不会被执行,有点像Response.RRedirect对web所做的那样。
我通过添加退货来解决问题;在UserControl B.中触发OnNavigation事件后的语句。