0

我在 winforms 应用程序的用户控件中有一个 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();
}
4

0 回答 0