2016-03-25 16 views
1

我注意到,通过以编程方式在Tab控件中选择一个Tab选择包含在所选标签页中的一个控件。是否有可能改变这种行为。我在页面中有一个控件,我不希望在从按钮单击中选择其标签页时被选中。我有一个带有选项卡控件和两个标签页的简单表单。当点击button1时,标签页2被选中,但该标签页中包含的datagridview也被选中。WinForms TabControl

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; 
    } 
} 

回答

0

这里是代码选择标签

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(); 
} 
1

默认情况下,当你选择一个标签(甚至当你开始一种形式),这是在你的Tab键顺序首先是自动对焦控制。我假设这是在这里发生的事情。

你可以通过简单地忽略相关的datagridView来解决这个问题。有多种方法可以做到这一点。首先,您可以将焦点设置为您希望选择的控件,而不是dataGridView。

myControl.Focus = True; 

或者相反,如果你想控制的不被选择,你可以主动控制设置为NULL:这可以通过完成

ActiveControl = NULL; 

注:ActiveControl是其中包含的属性当前的主动控制。

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

我相信还有其他的弊病也可以达到同样的效果。希望这可以帮助。

+1

我想能够使用在DataGridView在某些时候,但不是在包含它的标签页是selectedby按一下按钮。我应该使用布尔开关来确定GotFocus从哪里来? –

+1

只需将datagridview1的TabOrder属性不要为零。 –

+1

@PaulStanley再次看到我的回答我更新了它。 –

相关问题