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

时间:2020-03-05 18:49:02  来源:igfitidea点击:

假设我在" TabControl"中嵌套了一个"文本框"。

加载表单时,我想专注于"文本框"(默认情况下,焦点设置为" TabControl")。

仅在表单的"加载"事件中调用" 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_Shown()"事件中。因为它在容器中,所以放入Form_Load或者什至Form()构造函数都行不通。

回答

我们只需要将Control.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()。这帮助了我几次。