如何将焦点设置到用户控件

ton*_*ony 6 c# user-controls winforms

我有 50 个用户控件,可以动态添加到 flowlayoutPanel 中。我需要将焦点设置为用户控件,但它不起作用。我一直在搜索,但找不到任何我理解的例子。

我发现的唯一示例是 将焦点设置为 .NET 用户控件...?

我尝试使用 userCtrl.Focus(); 但它没有用。正如我一直在阅读用户控件不喜欢有焦点。

Har*_*lse 5

另外:现在我对这个Control类有了更多的了解,我明白如果你从Control你派生出来,你不应该订阅它的事件,而是使用 On.. 函数,比如OnEnter. 我已经相应地改变了我的答案

激活任何Control,包括UserControl使用Control.Select()

如果您对 a 执行此操作TextBox,您将看到Select确保它获得输入焦点。

我猜您想对选定的UserControlControl具有焦点的)做一些事情,例如,您想更改其外观,或选择其上的任何控件。为此,您的UserControl班级必须订阅事件 Control.Enter 和 Control.Leave

我已经创建了UserControl一个CheckBox在被选中时自动检查的A UserControl(具有输入焦点):

另外:如果您从控件派生,请不要订阅事件EnterLeave. 而是覆盖引发这些事件的函数: OnEnter / OnLeave

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    protected override void OnEnter(EventArgs e)
    {
        this.checkBox1.Checked = true;
        base.OnEnter(e); // this will raise the Enter event
    }

    protected override void OnLeave(EventArgs e)
    {
        this.checkBox1.Checked = false;
        base.OnLeave(e); // this will raise the Leave event
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个带有按钮的表单,以及一个在单击按钮时调用的事件处理程序:

private void OnButton1Clicked(object sender, EventArgs e)
{
    this.userControl1.Select();
}
Run Code Online (Sandbox Code Playgroud)

现在,每当单击按钮时,我都会看到用户控件获得焦点,因为选中了复选框,而每当我单击其他地方时,复选框都未选中。


Jan*_*kke 2

您可以使用ActiveControl属性将焦点设置到控件

this.ActiveControl = myUserControl;
Run Code Online (Sandbox Code Playgroud)