我有50个UserControls,我动态添加到flowlayoutPanel。 我需要将焦点设置为用户控件,但它不起作用。 我一直在搜索,但无法找到我理解的任何例子。
我找到的唯一例子就是这个 Setting Focus to a .NET UserControl...?
我尝试使用userCtrl.Focus();但它没有用。 正如我一直在阅读的那样,用户控制并不喜欢有焦点。
答案 0 :(得分:2)
补充:现在我了解了更多
Control
课程,我 要明白,如果你从Control
派生出来,就不应该订阅 它的事件,但使用On ..函数,如OnEnter
。我有 相应地改变了我的答案
要激活任何Control
,包括UserControl
使用Control.Select()
。
如果您对TextBox
执行此操作,则会看到Select
确保获得输入焦点。
我想你想对选定的UserControl
(具有焦点的Control
)做一些事情,例如,你想要改变它的外观,或选择它上面的任何控件。为此,您的UserControl
类必须订阅事件Control.Enter和Control.Leave
我创建了一个UserControl
CheckBox
,只要选择了UserControl
(具有输入焦点),就会自动检查:{/ p>
添加:如果您从控件派生,请不要订阅活动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
}
}
我有一个带有按钮的表单,以及单击该按钮时调用的事件处理程序:
private void OnButton1Clicked(object sender, EventArgs e)
{
this.userControl1.Select();
}
现在,无论何时单击该按钮,我都会看到用户控件获得焦点,因为选中了复选框,每当我点击其他地方时,都会取消选中该复选框。
答案 1 :(得分:2)
虽然你没有详细说明你的意思是什么它不起作用,但聚焦在很多方面都是常规的。
<强> 1。明确聚焦
调用控件的Focus()
方法与设置容器表单的ActiveControl
相同。如果CanFocus
返回true(您的控件及其所有父项都可见并启用),则它可以正常工作;但是,除了一些间接提示外,你没有视觉反馈,例如。最初聚焦的控件(按钮或文本框)失去焦点。
要想象聚焦状态,您可能需要使用一些自定义颜料:
protected override void OnPaintBackground(PaintEventArgs e)
{
e.Graphics.Clear(Focused ? SystemColors.Highlight : SystemColors.Control);
}
如果您直接从Control
而不是UserControl
派生,请覆盖以下两种方法以强制重新绘制以更改焦点状态:
protected override void OnGotFocus(EventArgs e)
{
Invalidate();
base.OnGotFocus(e);
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
Invalidate();
}
<强> 2。通过鼠标聚焦
要通过单击控件获得焦点,请将此行添加到构造函数:
SetStyle(ControlStyles.Selectable, true);
如果您直接从Control
而非UserControl
派生,请覆盖OnMouseDown
:
protected override void OnMouseDown(MouseEventArgs e)
{
if (!Focused)
Focus();
base.OnMouseDown(e);
}
第3。通过键盘聚焦
要通过 TAB 键获得焦点,只需将TabStop
属性设置为true
并调整TabOrder
属性。
答案 2 :(得分:0)
您可以使用ActiveControl属性
将焦点设置为控件this.ActiveControl = myUserControl;
答案 3 :(得分:0)
关注textBox1的示例:
.first
答案 4 :(得分:0)
您可以尝试用户控件的tab索引。如果将其选项卡索引设置为1,则一旦程序启动,它将被聚焦。