如何将焦点设置在自定义控件中的控件上?
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();
}
我有一个包含文本框和按钮的自定义控件。我使用自定义控件作为 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();
}