Winforms С# – установить фокус на первый дочерний элемент управления TabPage
Вопрос
Скажем, у меня есть Textbox
вложенный в TabControl
.
Когда форма загружается, я хотел бы сосредоточиться на этом Textbox
(по умолчанию фокус установлен на TabControl
).
Просто звоню textbox1.focus()
в Load
событие формы не работает.
Мне удалось сфокусироваться на этом, выполнив следующие действия:
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() для вашего элемента управления в этот код.Я использовал это, чтобы сосредоточить внимание на элементах управления во время проверки, когда возникают ошибки.
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