WinForms 选项卡控件

WinForms TabControl

我注意到,通过以编程方式在 Tab 控件中选择一个 Tab 可以选择包含在选项卡页中的一个控件 selected.Is 可以更改此行为。我在标签页中有一个控件,当通过单击按钮选择其标签页时,我不想被选中。我有一个带有选项卡控件和两个选项卡页的简单表单。单击 button1 时,将选择标签页 2,但该标签页中包含的 datagridview 也会被选中。

    public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        dataGridView1.GotFocus += DataGridView1_GotFocus;
    }

    private void DataGridView1_GotFocus(object sender, EventArgs e)
    {
       //this event is called from button1_click
    }

    private void button1_Click(object sender, EventArgs e)
    {
        tabControl1.SelectedTab = tabPage2;
    }
}

默认情况下,当您 select 一个选项卡时(甚至当您启动一个表单时),您的选项卡顺序中位于第一个的控件会自动获得焦点。我假设这就是这里发生的事情。

您可以通过简单地取消关注有问题的 datagridView 来解决这个问题。有多种方法可以做到这一点。首先,您可以将焦点设置到您希望 selected 而不是 dataGridView 的控件。这可以通过以下方式完成:

 myControl.Focus = True;

或者,如果您不想 select 编辑任何控件,您可以将活动控件设置为 Null:

 ActiveControl = NULL;

注意:ActiveControl 是一个 属性,其中包含当前活动的控件。

至于这段代码应该放在哪里。这完全取决于你。您可以在按钮单击事件中更改选项卡后立即执行此操作。这是我更喜欢的。

我相信还有其他的问题可以实现同样的目标。希望这有帮助。

这是 select 选项卡的代码

private void button1_Click(object sender, EventArgs e)
{
    // we can select tab by tab name
    tabControl1.SelectTab("tabPage2");
    tabControl1.SelectedIndex = 1;
    tabControl1.TabPages[0].Hide();
    tabControl1.TabPages[1].Show();
}