使用TabControl.SelectTab("...")显示选项卡但它也提供选项卡焦点.我想展示一个特定的标签,但要保持焦点.
我在网格中有数据行.根据所选行的属性,我显示了一个不同的标签页,以具有不同的UI布局.但是当使用箭头键滚动行时,焦点会切换到选定的选项卡 - 我不想发生这种情况.
谢谢.
Jef*_*ata 14
您可以尝试TabControl在设置所选选项卡之前禁用,然后重新启用它.这将防止它成为焦点.我在一个带有几个控件的选项卡控件上对此进行了测试,并没有看到任何视觉上的变化,但您必须在UI中尝试它并查看它是否适合您.
tabControl1.Enabled = false;
tabControl1.SelectTab("tabPage4");
tabControl1.Enabled = true;
Run Code Online (Sandbox Code Playgroud)
为了安全起见,您可以将该行重新启用finally块中的TabControl,以确保它不会被禁用.
我不认为有内置函数,但你可以这样做:
private bool skipSelectionChanged = false;
private void dataGridView_SelectionChanged(object sender, EventArgs e)
{
if (skipSelectionChanged)
return;
// supposing we decide tab[0] has to be selected...
this.SelectTabWithoutFocus(this.tabControl1.TabPages[0]);
}
private void SelectTabWithoutFocus(TabPage tabPage)
{
this.skipSelectionChanged = true;
// "this" is the form in my case, so you get the current focused control
// (ActiveControl), backup it, and re-set it after Tab activation
var prevFocusedControl = this.ActiveControl;
if (this.ActiveControl != null)
{
this.tabControl1.SelectedTab = tabPage;
prevFocusedControl.Focus();
}
this.skipSelectionChanged = false;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我备份当前获得焦点的控件,选择所需的选项卡,最后将焦点设置到原始控件。
跳过布尔值是必要的,因为将焦点转移到网格上会SelectionChanged再次触发事件,从而导致无限循环。