1

我们目前正在将 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 而不更改任何代码时,它刚刚进入递归并且应用程序崩溃了。请为此提供帮助。提前致谢。

4

3 回答 3

0

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

[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);
于 2014-03-03T06:44:08.470 回答
0

Woooow ... GotFocus 在控件接收(=具有)焦点时发生,而不是在给予焦点时发生。在您的方法中,您最终将注意力集中在引发此事件 => 循环的控件上!

tbCustom 已聚焦 => 您的代码运行,并将焦点设置为 tbCustom => 您的代码运行...

从您的方法中删除此行:

tbCustom.Focus();

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

于 2014-01-22T13:46:52.397 回答
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();
    }
}
于 2014-02-28T14:49:34.960 回答