我们目前正在将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崩溃。请提供有关此的帮助。提前谢谢。
答案 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);