C# 如何防止用户控件窃取焦点?

C# 如何防止用户控件窃取焦点?,c#,winforms,C#,Winforms,我创建了一个用作键盘的用户控件。我在控件中以与键盘完全相同的方式排列按钮,并设置控件样式。可选,错误。这允许焦点停留在用户在父窗体上选择的文本框中。我还将用户控件的样式设置为不可选择。当用户按下按钮时,一切都很好,但当用户控件被单击时,它会将焦点从文本框中偷走。这是我的密码: public partial class TouchKeyboard : UserControl { public TouchKeyboard() { Ini

我创建了一个用作键盘的用户控件。我在控件中以与键盘完全相同的方式排列按钮,并设置控件样式。可选,错误。这允许焦点停留在用户在父窗体上选择的文本框中。我还将用户控件的样式设置为不可选择。当用户按下按钮时,一切都很好,但当用户控件被单击时,它会将焦点从文本框中偷走。这是我的密码:

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.Selective设置为false时,为什么我的用户控件会窃取焦点?

经过几天的修改,我终于找到了答案。由于面板不会窃取焦点,我将面板停靠在用户控件中,并将按钮放在其中。这解决了问题

如果您跟踪上次使用的焦点元素(UserControl或其中的任何内容除外),该怎么办?比方说,您为您的用户控件创建了一个新控件lastFocusedElement属性,并在ButtonClick中检查它是否已分配,以及lastFocusedElement。是否在button click方法的末尾激活该元素?