Windows .NET紧凑框架3.5丢失焦点事件无法正常工作

时间:2013-12-16 15:25:42

标签: .net windows-embedded-compact

我们目前正在将PDA应用程序从.NET compact framework 1.1迁移到.NET compact framework 3.5 安装了操作系统Windows 6.0和6.5的PDA。

在自定义文本框的got_focus事件中,我们编写了以下代码

enter code here
private void tbCustom_GotFocus(object sender, EventArgs e)
{ 
    m_Keypad.SetBuffer(tbMileage.Text);
    m_Keypad.HideOSKeyPad();
    m_Keypad.Show();
    this.m_ToolBarButtonNumericKeypad.ImageIndex = 11;
    tbCustom.Focus();
}

它在.NET CF 1.1中运行良好,但是我们将这段代码转换为3.5而不更改任何代码,它只是进入递归和applcaiton崩溃。请提供有关此的帮助。提前谢谢。

3 个答案:

答案 0 :(得分:0)

Woooow ...当控件接收(= has)焦点时发生GotFocus,而不是在给焦点时。 在你的方法中,你最终只关注投掷此事件的控件=>循环!

cbCustom已关注=>您的代码运行,并将焦点设置为tbCustom =>你的代码运行...

从您的方法中删除此行:

tbCustom.Focus();

关于GotFocus的文件:http://msdn.microsoft.com/fr-fr/library/system.windows.forms.control.gotfocus(v=vs.110).aspx

答案 1 :(得分:0)

怎么样:

private void tbCustom_GotFocus(object sender, EventArgs e)
{
    if (m_Keypad.Visible == false)
    {
        m_Keypad.SetBuffer(tbMileage.Text);
        m_Keypad.HideOSKeyPad();
        m_Keypad.Show();
        this.m_ToolBarButtonNumericKeypad.ImageIndex = 11;
        tbCustom.Focus();
    }
}

答案 2 :(得分:0)

有几种Pinvoke方法用于打开自定义键盘窗口而不关注它。此API在CF1.0中有效,但它不适用于.NET CF3.5以下是适用于.NET CF3.5的正确

[DllImport("coredll.dll", SetLastError = true)]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("coredll.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);