Текстовое поле Devexpress теряет фокус после открытия OSK

У меня есть текстовое поле devexpress в usercontrol в приложении winforms. Проблема заключается в том, что когда пользовательский контроль загружен, и пользователь нажимает на текстовое поле 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();
}

0 ответов

Другие вопросы по тегам