c#选项卡问题(禁用标头/点击事件)
本文关键字:事件 选项 问题 | 更新日期: 2023-09-27 18:02:33
我以为我有这个,但是没有。我有一个5页的tabcontrol。我有它,所以当我点击tabpage4("库存")空白空间,它添加的东西到数据视图和丰富的文本框。这只发生在我点击页面本身时,并且在随后的每次点击中都会重复。我需要知道…
-有一种方法做的东西,当我点击标签,而不是页面本身?-我可以让你只能点击一次标签,以防止重复吗?
我看了看第二个问题,但他们都禁用了整个页面-我需要能够仍然使用页面内的控件。
我有;
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);
}
最后,您希望只运行函数一次,因此必须记住是否已经运行过代码。您可以创建许多变量,或者您可以使用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
}
}