c#选项卡问题(禁用标头/点击事件)

本文关键字:事件 选项 问题 | 更新日期: 2023-09-27 18:02:33

我以为我有这个,但是没有。我有一个5页的tabcontrol。我有它,所以当我点击tabpage4("库存")空白空间,它添加的东西到数据视图和丰富的文本框。这只发生在我点击页面本身时,并且在随后的每次点击中都会重复。我需要知道…

-有一种方法做的东西,当我点击标签,而不是页面本身?-我可以让你只能点击一次标签,以防止重复吗?

我看了看第二个问题,但他们都禁用了整个页面-我需要能够仍然使用页面内的控件。

我有;

void tabPage4_Click(object sender, EventArgs e)
{
Add Stuff
}

谢谢

c#选项卡问题(禁用标头/点击事件)

您应该侦听的正确方法是SelectedIndexChanged:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show("Hey!");
}

当你每次改变选项卡时,无论以何种方式,即使你使用快捷键,这个都会被触发。

现在,您可以通过查看SelectedTab属性来获得选中的选项卡页:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show("You are viewing " + tabControl1.SelectedTab.Name);
}

最后,您希望只运行函数一次,因此必须记住是否已经运行过代码。您可以创建许多变量,或者您可以使用Tag属性(这是为您存储任何您想要的):

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (tabControl1.SelectedTab.Tag == null)
    {
        tabControl1.SelectedTab.Tag = true; //set to true so no longer evaluates to null
        MessageBox.Show("You are viewing " + tabControl1.SelectedTab.Name);
    }
    else
    {
        MessageBox.Show("Sorry, can't run twice.");
    }
}

希望这对你有帮助!

p。:您可以在if中使用switch语句:)

如果您想动态地将对话框附加到选项卡页面上,您可以通过选择事件来实现,通过单击选项卡并在选项卡页面显示之前触发:

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (tabControl1.SelectedTab == tabPage1)
    {
        //Attach only once
        if (tabPage1.HasChildren)
            return;
        myDialog1 dg = new myDialog1();
        dg.TopLevel = false;
        dg.Dock = DockStyle.Fill;
        dg.Parent = tabPage1;
        dg.Show();
    }
    else if (tabControl1.SelectedTab == tabPage2)
    {
        if (tabPage2.HasChildren)
            return;
        myDialog2 dg = new myDialog2();
        dg.TopLevel = false;
        dg.Dock = DockStyle.Fill;
        dg.Parent = tabPage2;
        dg.Show();
    }
    else if (tabControl1.SelectedTab == tabPage3)
    {
       //and so on
    }
}