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

  1. 初始化UserControl A
  2. 将UserControl A添加到Form.Controls
  3. 关注A上的网格

导航到UserControl B

  1. 初始化UserControl B
  2. 从Form.Controls中删除UserControl A
  3. 将UserControl B添加到Form.Controls

导航回UserControl A

  1. 初始化UserControl A
  2. 从Form.Controls中删除UserControl B
  3. 将UserControl A添加到Form.Controls
  4. 关注A上的网格

所有这些工作都很好,在第一次添加UserControl A时,表单是有焦点的,子控件也有焦点。

但是,当我从UserControl B导航回UserControl A时,表单会失去焦点,但前提是我在最后一步尝试将焦点集中在子控件上。在我的应用程序中,这导致我无法使用手机硬件按钮在网格中导航。

你知道为什么主形式会失去焦点吗?

C#Winforms在专注于儿童控制时会失去注意力..有时

结果是,当我导航回UserControl A时,通过在方法中间触发导航事件,UserControl B中的代码继续执行,从而阻止了对UserControl A的关注。

我曾希望,当我从Form.Controls中删除UserControlB(然后处理它)时,该方法的其余部分不会被执行,有点像Response.RRedirect对web所做的那样。

我通过添加退货来解决问题;在UserControl B.中触发OnNavigation事件后的语句。