如何将焦点设置在自定义控件中的控件上?

How to set focus on a control within a custom control?

我有一个包含文本框和按钮的自定义控件。我使用自定义控件作为 ObjectListView 中特定列的编辑控件。

我在 CellEditStarting 事件上做:

private void datalistViewProducts_CellEditStarting(object sender, CellEditEventArgs e)
{
    var ctl = (MyCustomControl)e.Control;
    e.Control = ctl;
}

ObjectListView 的 ConfigureControl 方法已经调用了控件的 Select 方法。如果我有一个直接从标准 TextBox 继承的用户控件,它就可以正常工作。

所以我将以下代码添加到我的用户控件中:

public new void Select()
{
    textBox.Select();
}

但是,具有如上所述的用户控件,Select 方法不会将焦点移动到文本框。

我在这里错过了什么?

您可以在 CustomUserControl 中创建一个方法,比如 FocusControl(string controlName) 然后调用此方法将控件聚焦到Custom Control中。

Create the method in your custom User Control-

public void FocusControl(string controlName)
    {
        var controls = this.Controls.Find(controlName, true);
        if (controls != null && controls.Count() == 1)
        {
            controls.First().Focus();
        }
    }

Call this method-

//textBox1 is the name of your focussing control in Custom User Control
userControl11.FocusControl("textBox1");

使它最终起作用的唯一方法是在用户控件中添加以下代码:

protected override void OnEnter(EventArgs e)
{
    base.OnEnter(e);
    textBox.Select();
}