我在winforms应用程序的usercontrol中有一个devexpress文本框。 问题是,当加载用户控件并且用户点击devexpress文本框时,它反过来调用OSK键盘,从文本框中失去焦点。
用户无法直接在OSK上开始输入。相反,他需要点击文本框再次获得焦点并开始输入。
请建议是否有任何解决方案。
我通过调试找到的是,当我在设置的焦点代码上放置一个断点时,焦点被分配给文本框。但是当我尝试一次性运行它时,它没有设置焦点。
private void OnMouseClickUserControl(object sender, MouseEventArgs e)
{
// verify if the button is displayed
if (!this.ShowButton)
{
this.OnEnterUserControl(this, e);
}
}
private void OnEnterUserControl(object sender, EventArgs e)
{
// verify if button is displayed
if (!this.ShowButton)
{
// set the input scope
this.SetInputScope();
// show the keyboard
TabTip.OpenTabTip();
// focus the helper textbox
//this.tbxText.Focus();
this.tbxText.SelectAll();
this.tbxText.SelectionLength = 0;
}
}
public static bool OpenTabTip()
{
bool result = false;
// reset the main window handle
TabTip._keyboardMainWindowHandle = IntPtr.Zero;
string osk = Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "system32"), "osk.exe");
string pathX64 = Environment.ExpandEnvironmentVariables("%ProgramW6432%");
string pathX32 = Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%");
// in case of 32 bit systems
if (osk.Contains(pathX32))
osk = osk.Replace(pathX32, pathX64);
// start the keyboard process
ProcessStartInfo startInfo = new ProcessStartInfo(osk);
Process tmp = System.Diagnostics.Process.Start(startInfo);
// wait until starting the process has been finished
//result = tmp.WaitForInputIdle(5000);
// refresh the process information
tmp.Refresh();
}