当关注儿童控制时,C#Winforms形成失去焦点......有时候

时间:2013-08-13 07:44:59

标签: c# winforms user-controls focus compact-framework

我正在开发一个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.   
  3. 将UserControl A添加到Form.Controls
  4.   
  5. 专注于A
  6. 上的网格

    导航到UserControl B

        
    1. 初始化UserControl B
    2.   
    3. 从Form.Controls中删除UserControl A
    4.   
    5. 将UserControl B添加到Form.Controls
    6. 导航回UserControl A

          
      1. 初始化UserControl A
      2.   
      3. 从Form.Controls中删除UserControl B
      4.   
      5. 将UserControl A添加到Form.Controls
      6.   
      7. 专注于A
      8. 上的网格

        所有这一切都运行良好,在第一次添加UserControl时,表单被聚焦,子控件也有焦点。

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

        关于为什么主要形式失去焦点的任何想法?

1 个答案:

答案 0 :(得分:2)

事实证明,当我导航回UserControl A时,通过在方法中间触发导航事件,UserControl B中的代码继续执行,从而无法专注于UserControl A.

我原本希望当我从Form.Controls中删除UserControl B(然后处理它)时,该方法的其余部分将不会被执行,就像Response.Redirect对于web一样。

我通过添加一个返回来解决问题;在UserControl B中触发OnNavigation事件后的语句。