Compact Framework 3.5文本字段集焦点不起作用

时间:2012-04-17 12:24:55

标签: c# compact-framework focus textfield

我使用下面的代码将焦点设置为文本字段:

public void setFieldInFocus(TabPage tabPage)
    {
        foreach (Control t in tabPage.Controls)
        {
            if (t is TextBox)
            {
                if (t.Name == fieldInFocus)
                {
                    t.Focus();              

                }
            }

        }

    }

光标显示在文本字段中,但是当我尝试使用移动键盘输入文本时,在我单击文本字段之前没有任何反应,即使光标已经在文本字段中。然后我点击文本字段并尝试使用移动键盘输入文本,它可以工作。为什么我还要点击文本字段来输入文字?我该怎么做才能解决这个问题?

请注意我使用的是compact framework 3.5和textField.Select();不可用。

由于

1 个答案:

答案 0 :(得分:1)

您发布的代码段是什么时候执行的?是在表格实际显示之前吗?如果是这样,.NET运行时将覆盖手动焦点设置并将其更改为表单上的第一个可聚焦控件。

即使光标出现在文本框内,它也可能不是具有焦点的控件。

我认为不太理想的一种解决方案是在表单加载事件触发时以非常短的间隔(比如10)删除表单上的计时器。在timer_tick处理程序中,禁用计时器(确保它只运行一次),然后执行代码片段。以这种方式执行代码可确保Windows消息泵有机会完全加载并显示您的表单(并在执行它的默认焦点例程的过程中) 之前执行焦点覆盖代码。

缓解此问题的更好方法是尝试设计表单,使文本框成为第一个可聚焦项目。默认情况下,表单将以深度优先的方式迭代它的子控件树,一旦找到可聚焦的控件,它就会聚焦该控件并启动。

如果您查看表单的设计器代码文件,请尝试手动调整它,以确保:

  1. 文本框是添加到标签页的第一个控件
  2. tabpage是添加到选项卡控件的第一个控件
  3. tabcontrol是添加到表单的第一个控件。
  4. 当这三件事情都成立时,默认情况下会首先聚焦文本框,您不必运行任何其他代码来覆盖它。

    希望这有帮助。