Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#选项卡页面问题(禁用标题/单击事件)_C#_Tabcontrol - Fatal编程技术网

c#选项卡页面问题(禁用标题/单击事件)

c#选项卡页面问题(禁用标题/单击事件),c#,tabcontrol,C#,Tabcontrol,我以为我有这个,但没有。我有一个5页的标签控件。我有它,所以当我点击tabpage4(“库存”)空白时,它会向datagridview和富文本框添加内容。只有在我单击页面本身时才会发生这种情况,并且在以后每次单击时都会重复。我需要知道 -当我点击标签,而不是页面本身时,有没有一种方法可以完成这些事情? -我可以让您只单击一次选项卡以防止重复吗 我查看了第二个问题,但它们都禁用了整个页面-我需要能够仍然使用页面内的控件 我有 void tabPage4_Click(object sender, E

我以为我有这个,但没有。我有一个5页的标签控件。我有它,所以当我点击tabpage4(“库存”)空白时,它会向datagridview和富文本框添加内容。只有在我单击页面本身时才会发生这种情况,并且在以后每次单击时都会重复。我需要知道

-当我点击标签,而不是页面本身时,有没有一种方法可以完成这些事情? -我可以让您只单击一次选项卡以防止重复吗

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

我有

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

谢谢

您应该收听的正确方法是
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);
}
最后,您希望只运行一次函数,因此必须记住是否已经运行了代码。您可以创建许多变量,也可以只使用
标记
属性(它可以存储您想要的任何内容):

希望这有帮助


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

您应该听的正确方法是
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);
}
最后,您希望只运行一次函数,因此必须记住是否已经运行了代码。您可以创建许多变量,也可以只使用
标记
属性(它可以存储您想要的任何内容):

希望这有帮助


注:您可以在
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
    }
}

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

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

只需创建一个名为
haspubleted
bool
,并将其初始设置为
false
。第一次填充时,将其设置为
true
,并在
单击
事件上检查其值。只需创建一个名为
haspublated
bool
,并最初将其设置为
false
。第一次填充时,将其设置为
true
,并在
单击事件上检查其值。感谢您的回答:)但是,我只需要tabpage4使用它,而不是整个控件,所以我只需要将“tabControl1”替换为“tabpage4”?感谢您的回答:)但是,我只需要tabpage4使用它,不是整个控件,所以我会用“tabpage4”替换“tabControl1”吗?