У меня недавно была похожая проблема.Мой интерфейс очень сложный, с множеством панелей и вкладок, поэтому ни один из простых ответов, которые я нашел, не сработал.
Мое решение состояло в том, чтобы программно добавить обработчик щелчка мышью к каждому не фокусируемому элементу управления в моей форме, который попытался бы сфокусировать любые метки на форме.Фокусировка определенной метки не будет работать на другой вкладке, поэтому я закончил цикл и сфокусировал все метки.
Код для выполнения выглядит следующим образом:
private void HookControl(Control controlToHook)
{
// Add any extra "unfocusable" control types as needed
if (controlToHook.GetType() == typeof(Panel)
|| controlToHook.GetType() == typeof(GroupBox)
|| controlToHook.GetType() == typeof(Label)
|| controlToHook.GetType() == typeof(TableLayoutPanel)
|| controlToHook.GetType() == typeof(FlowLayoutPanel)
|| controlToHook.GetType() == typeof(TabControl)
|| controlToHook.GetType() == typeof(TabPage)
|| controlToHook.GetType() == typeof(PictureBox))
{
controlToHook.MouseClick += AllControlsMouseClick;
}
foreach (Control ctl in controlToHook.Controls)
{
HookControl(ctl);
}
}
void AllControlsMouseClick(object sender, MouseEventArgs e)
{
FocusLabels(this);
}
private void FocusLabels(Control control)
{
if (control.GetType() == typeof(Label))
{
control.Focus();
}
foreach (Control ctl in control.Controls)
{
FocusLabels(ctl);
}
}
И затемдобавьте это в событие Form_Load:
HookControl(this);