如何防止用户控制窃取焦点

本文关键字:焦点 控制 何防止 用户 | 更新日期: 2023-09-27 18:03:37

我创建了一个功能相当于键盘的用户控件。我以与键盘完全相同的方式安排控件中的按钮,并设置(ControlStyles.Selectable, false)。这允许焦点停留在用户在父窗体上选择的文本框中。我还将用户控件的样式设置为不可选择。当用户按下按钮时,一切都很好,但是当用户控件被点击时,它就把焦点从文本框上偷走了。下面是我的代码:

public partial class TouchKeyboard : UserControl
    {
        public TouchKeyboard()
        {
            InitializeComponent();
            SetStyle(ControlStyles.Selectable, false);
        }
        private void TouchKeyboard_Load(object sender, EventArgs e)
        {
            foreach (var button in this.Controls.OfType<CustomControls.CustomButton>())
            {
                button.Click += new EventHandler(this.ButtonClick);
            }
        }
        private void ButtonClick(object sender, EventArgs e)
        {
            var button = sender as CustomControls.CustomButton;
            if (button.Name == "btnSpace")
            {
                SendKeys.Send(" ");
            }
            else
            {
                SendKeys.Send("{" + button.Text + "}");
            }
        }
    }

ControlStyles.Selectable设置为false时,为什么我的用户控件会窃取焦点?

如何防止用户控制窃取焦点

折腾了几天后,我终于弄明白了。由于面板不会抢焦点,所以我在用户控制中插入了一个面板,并将我的按钮放在其中。这就解决了问题。