ton*_*ony 6 c# user-controls winforms
我有 50 个用户控件,可以动态添加到 flowlayoutPanel 中。我需要将焦点设置为用户控件,但它不起作用。我一直在搜索,但找不到任何我理解的例子。
我发现的唯一示例是 将焦点设置为 .NET 用户控件...?
我尝试使用 userCtrl.Focus(); 但它没有用。正如我一直在阅读用户控件不喜欢有焦点。
另外:现在我对这个
Control类有了更多的了解,我明白如果你从Control你派生出来,你不应该订阅它的事件,而是使用 On.. 函数,比如OnEnter. 我已经相应地改变了我的答案
激活任何Control,包括UserControl使用Control.Select()。
如果您对 a 执行此操作TextBox,您将看到Select确保它获得输入焦点。
我猜您想对选定的UserControl(Control具有焦点的)做一些事情,例如,您想更改其外观,或选择其上的任何控件。为此,您的UserControl班级必须订阅事件 Control.Enter 和 Control.Leave
我已经创建了UserControl一个CheckBox在被选中时自动检查的A UserControl(具有输入焦点):
另外:如果您从控件派生,请不要订阅事件Enter和Leave. 而是覆盖引发这些事件的函数: 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)
现在,每当单击按钮时,我都会看到用户控件获得焦点,因为选中了复选框,而每当我单击其他地方时,复选框都未选中。
您可以使用ActiveControl属性将焦点设置到控件
this.ActiveControl = myUserControl;
Run Code Online (Sandbox Code Playgroud)