Winforms c#-将焦点设置为TabPage的第一个子控件

Winforms c#-将焦点设置为TabPage的第一个子控件,c#,.net,winforms,focus,C#,.net,Winforms,Focus,假设我有一个嵌套在选项卡控件中的文本框 加载表单时,我希望将焦点放在文本框上(默认情况下,焦点设置为选项卡控件) 仅在表单的Load事件中调用textbox1.focus(),似乎不起作用 我可以通过以下操作来集中精力: private void frmMainLoad(object sender, EventArgs e) { foreach (TabPage tab in this.tabControl1.TabPages) { this.tabC

假设我有一个嵌套在
选项卡控件中的
文本框

加载表单时,我希望将焦点放在
文本框上(默认情况下,焦点设置为
选项卡控件

仅在表单的
Load
事件中调用
textbox1.focus()
,似乎不起作用

我可以通过以下操作来集中精力:

 private void frmMainLoad(object sender, EventArgs e)
 {
     foreach (TabPage tab in this.tabControl1.TabPages) 
     {
         this.tabControl1.SelectedTab = tab;
     }
 }
我的问题是:


有没有更优雅的方法可以做到这一点?

以下是解决方案:

private void frmMainLoad(object sender, EventArgs e)
{
    ActiveControl = textBox1;
}
然而,更好的问题是为什么。。。我不完全确定这个问题的答案是什么


编辑:我怀疑这与表单和TabControl都是容器这一事实有关,但我不确定。

尝试将其放入
表单显示()事件中。因为它在容器中,所以放入Form_Load甚至Form()构造函数都不起作用。

您只需要将控件的.Select()添加到此代码中。我用它来设置验证过程中出现错误时控件的焦点

private void ShowControlTab(Control ControlToShow)
    {
        if (!TabSelected)
        {
            if (ControlToShow.Parent != null)
            {
                if (ControlToShow.Parent.GetType() == typeof(TabPage))
                {
                    TabPage Tab = (TabPage)ControlToShow.Parent;
                    if (WOTabs.TabPages.Contains(Tab))
                    {
                        WOTabs.SelectedTab = Tab;
                        TabSelected = true;
                        return;
                    }
                }

                ShowControlTab(ControlToShow.Parent);
            }
        }
    }

尝试使用
textbox1.Select()
而不是
textbox1.Focus()
。这对我有几次帮助。

我在另一个用户控件中有一个用户控件。textbox1.Select()对我有效,但textbox1.Focus()不起作用

您还可以尝试将Tabstop设置为false,textbox1.Focus(),Tabstop设置为true

  private void ChildForm1_Load(object sender, EventArgs e)
        {
            ActiveControl = txt_fname;

        }

我使用这段代码,它在win tab控件或dotnetbar supertab控件上工作正常,但在加载时不工作,因为加载后,控件根据选项卡顺序重新聚焦,聚焦控件被“覆盖”。当您对焦显示的控件时,不会通过对焦另一个控件来“覆盖”您的呼叫。