Winforms c# – 将焦点设置为TabPage的第一个子控件
假设我有一个嵌套在TabControl
的Textbox
。
当表单加载时,我想关注该Textbox
(默认情况下焦点设置为TabControl
)。
只需在表单的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_Shown()
事件中。 因为它在容器中,所以放入Form_Load甚至Form()构造函数都不起作用。
尝试使用textbox1.Select()
而不是textbox1.Focus()
。 这对我帮了几次。
您只需要将控件的Control.Select()添加到此代码中。 当有错误时,我已经使用它来在validation期间将注意力集中在控件上。
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()不起作用。
您也可以尝试将Tabstop设置为false,textbox1.Focus(),TabStop为true。
private void ChildForm1_Load(object sender, EventArgs e) { ActiveControl = txt_fname; }
我使用此代码它在win选项卡控件或dotnetbar supertab控件上工作正常