如何将焦点设置为Usercontrol

时间:2016-09-13 13:59:45

标签: c# winforms user-controls

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

我找到的唯一例子就是这个 Setting Focus to a .NET UserControl...?

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

5 个答案:

答案 0 :(得分:2)

  

补充:现在我了解了更多Control课程,我   要明白,如果你从Control派生出来,就不应该订阅   它的事件,但使用On ..函数,如OnEnter。我有   相应地改变了我的答案

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

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

我想你想对选定的UserControl(具有焦点的Control)做一些事情,例如,你想要改变它的外观,或选择它上面的任何控件。为此,您的UserControl类必须订阅事件Control.Enter和Control.Leave

我创建了一个UserControl CheckBox,只要选择了UserControl(具有输入焦点),就会自动检查:{/ p>

添加:如果您从控件派生,请不要订阅活动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
    }
}

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

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,则一旦程序启动,它将被聚焦。