c# tabcontrol 的一些属性
这个是tabcontrol里面的2个选项卡假设基本查找=A高级查找=B问题来了 点击A触发事件,点击B再触发另一事件这个是想要的结果.为什么点击A或B使用的都是...
这个是tabcontrol里面的 2个选项卡 假设 基本查找=A 高级查找=B问题来了 点击A 触发事件, 点击B再触发另一事件 这个是想要的结果.为什么点击A或B 使用的都是同一个事件?
展开
5个回答
展开全部
你好,我不知道你选择的是什么事件,click ?
其实不管什么选谁,都是触发的tabcontrol的事件,选项卡本身没有独立的事件,这一点可以这样验证:在设计时,你选择tabPage1的标头,或者tabPage2标头,你会发现在属性栏里,名称都是tabcontrol。所以事件也是同一个。
但是对于每个tabPage主体,也就是具体放东西的地方是独立的,他们是System.Windows.Forms.TabPage类,他们有自己的事件。
如果你想使用他们独立的事件,应该在设计时,点击某一个TabPage主体部分,然后选择相应的事件。这样事件就不同了。
不过我感觉你说的“点击A 触发事件, 点击B再触发另一事件”是指点击标头部分,这时实际事件的主体是tabcontrol,所以事件自然也是同一个。一般都程序都是想让点击头部触发相应事件,
所以我建议你选择tabControl_SelectedIndexChanged()这样不管选谁,都触发这个事件,然后在根据SelectedIndex属性做相应的处理。
下写个例子看看:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (tabControl1.SelectedIndex)
{
case 0:
MessageBox.Show("选择了标签1");
//此处添加你需要需要处理的内容,可以调用函数等等
break;
case 1:
MessageBox.Show("选择了标签2");
//此处添加你需要需要处理的内容
break;
}
}
希望对你有帮助。
其实不管什么选谁,都是触发的tabcontrol的事件,选项卡本身没有独立的事件,这一点可以这样验证:在设计时,你选择tabPage1的标头,或者tabPage2标头,你会发现在属性栏里,名称都是tabcontrol。所以事件也是同一个。
但是对于每个tabPage主体,也就是具体放东西的地方是独立的,他们是System.Windows.Forms.TabPage类,他们有自己的事件。
如果你想使用他们独立的事件,应该在设计时,点击某一个TabPage主体部分,然后选择相应的事件。这样事件就不同了。
不过我感觉你说的“点击A 触发事件, 点击B再触发另一事件”是指点击标头部分,这时实际事件的主体是tabcontrol,所以事件自然也是同一个。一般都程序都是想让点击头部触发相应事件,
所以我建议你选择tabControl_SelectedIndexChanged()这样不管选谁,都触发这个事件,然后在根据SelectedIndex属性做相应的处理。
下写个例子看看:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
switch (tabControl1.SelectedIndex)
{
case 0:
MessageBox.Show("选择了标签1");
//此处添加你需要需要处理的内容,可以调用函数等等
break;
case 1:
MessageBox.Show("选择了标签2");
//此处添加你需要需要处理的内容
break;
}
}
希望对你有帮助。
展开全部
在TabControl控件中并没提供单个选项卡的Click事件,今天下午翻了翻MSDN 结果还是没找到相关的文档:
以下是代码片段:
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
switch(this.tabControl1.SelectedIndex)
{
case 0:
MessageBox.Show("tabPage1 is Selected");
break;
case 1:
MessageBox.Show("tabPage2 is Selected");
break;
}
}
在WinForm开 发的过程中,MDI是一种常见的形式。在MDI主窗体打开的子窗体处于活动状态的只有一个,很多时候我们需要在打开的MDI子窗 体中切换。然而.Net的框架并没有提供一种易见的切换方式,当然可以通过“Ctrl+Tab”来切换,但是这种方式是不易见的,并且只能按照打开窗体的 顺序来切换。
下面来介绍一种结合了TabCotrol控件的软件设计形式。
这种设计形式要解决三个问题:
(1)TabControl的TabPage要和窗体对应
(2)TabControl的TabPage切换的时候,对应的窗体要激活
(3)窗体的新建或关闭,对应的TabPage要创建或撤销
下面就来一步步的解决这些问题
首先拖一个TabControl控件到MDI主窗口中,设置其DOCK为Bottom或者TOP,根据需要也可以设置到左或右。设置其Height为0。主窗体添加如下代码:
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.MdiChildren.Length > 0)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].Activate();
return;
}
}
}
}
or
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
this.ChangeTabPage();
}
//子窗体切换激活
private void ChangeTabPage()
{
if (this.MdiChildren.Length > 0 && tabControl.SelectedIndex > -1)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].WindowState = FormWindowState.Maximized;
this.MdiChildren[i].Visible = true;
this.MdiChildren[i].Activate();
}
else if (this.MdiChildren[i].Visible == true)
{
this.MdiChildren[i].Visible = false;
}
}
}
}
//增加TabPage,将对应的窗体激活
private void tabControl_ControlAdded(object sender, ControlEventArgs e)
{
if (this.tabControl.SelectedIndex == 0)
this.ChangeTabPage();
}
//关闭TabPage,将对应的窗体关闭
private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
//if (this.tabControl.SelectedIndex == 0)
//this.ChangeTabPage();
}
//窗体关闭的时候,撤销对应的TabPage
public void RemoveTabPage(TabPage tb)
{
this.MultiPageControl.TabPages.Remove(tb);
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 0);
}
}
//窗体创建的时候,创建对应的TabPage
public void AddTabPage(TabPage tb)
{
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 20);
}
this.MultiPageControl.TabPages.Add(tb);
this.MultiPageControl.SelectedTab = tb;
}
//获取TabControl控件,以便子窗体调用(只读)
public TabControl MultiPageControl
{
get
{
return this.tabControl;
}
}
//获取TabControl控件的Size属性,以便子窗体调用
public Size TabControlSize
{
get
{
return this.tabControl.Size;
}
set
{
this.tabControl.Size = value;
}
}
对应子窗体,每个窗体打开的时候,主窗体都需要创建一个TabPage,关闭的时候,都要撤销一个TabPage,也就是说所有的子窗体都有共同的属性和功能,所以我设置了一个父窗体来实现这些功能,子窗体通过继承而拥有这些功能。
private frmMain frMain = null;
private TabPage tabPage = new TabPage();
private void frmTabMain_ParentChanged(object sender, EventArgs e)
{
if (this.MdiParent != null)
{
this.tabPage.Text = this.Text + " ";
frMain = this.MdiParent as frmMain;//获取主窗体
frMain.AddTabPage(tabPage);//调用主窗体方法,创建一个TabPage
}
}
//窗体被激活,对应的TabPage也呈选中状态
private void frmTabMain_Enter(object sender, EventArgs e)
{
if (this.frMain != null)
{
for (int i = 0; i < this.frMain.MdiChildren.Length; i++)
{
if (this.frMain.MdiChildren[i] == this)
{
this.frMain.MultiPageControl.SelectedIndex = i;
}
}
}
}
//窗体关闭,调用主窗体方法,撤销对应TabPage
private void frmTabTitleMain_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
this.frMain.RemoveTabPage(tabPage);
}
//窗体加载的时候,将窗体的标题赋给对应的TabPage
private void frmTabMain_Load(object sender, EventArgs e)
{
// this.tabPage.Text = this.Text;
}
以下是代码片段:
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
switch(this.tabControl1.SelectedIndex)
{
case 0:
MessageBox.Show("tabPage1 is Selected");
break;
case 1:
MessageBox.Show("tabPage2 is Selected");
break;
}
}
在WinForm开 发的过程中,MDI是一种常见的形式。在MDI主窗体打开的子窗体处于活动状态的只有一个,很多时候我们需要在打开的MDI子窗 体中切换。然而.Net的框架并没有提供一种易见的切换方式,当然可以通过“Ctrl+Tab”来切换,但是这种方式是不易见的,并且只能按照打开窗体的 顺序来切换。
下面来介绍一种结合了TabCotrol控件的软件设计形式。
这种设计形式要解决三个问题:
(1)TabControl的TabPage要和窗体对应
(2)TabControl的TabPage切换的时候,对应的窗体要激活
(3)窗体的新建或关闭,对应的TabPage要创建或撤销
下面就来一步步的解决这些问题
首先拖一个TabControl控件到MDI主窗口中,设置其DOCK为Bottom或者TOP,根据需要也可以设置到左或右。设置其Height为0。主窗体添加如下代码:
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.MdiChildren.Length > 0)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].Activate();
return;
}
}
}
}
or
//切换TabPage,将对应的窗体激活
private void tabControl_SelectedIndexChanged(object sender, EventArgs e)
{
this.ChangeTabPage();
}
//子窗体切换激活
private void ChangeTabPage()
{
if (this.MdiChildren.Length > 0 && tabControl.SelectedIndex > -1)
{
for (int i = 0; i < this.MdiChildren.Length; i++)
{
if (this.tabControl.SelectedIndex == i)
{
this.MdiChildren[i].WindowState = FormWindowState.Maximized;
this.MdiChildren[i].Visible = true;
this.MdiChildren[i].Activate();
}
else if (this.MdiChildren[i].Visible == true)
{
this.MdiChildren[i].Visible = false;
}
}
}
}
//增加TabPage,将对应的窗体激活
private void tabControl_ControlAdded(object sender, ControlEventArgs e)
{
if (this.tabControl.SelectedIndex == 0)
this.ChangeTabPage();
}
//关闭TabPage,将对应的窗体关闭
private void tabControl_ControlRemoved(object sender, ControlEventArgs e)
{
//if (this.tabControl.SelectedIndex == 0)
//this.ChangeTabPage();
}
//窗体关闭的时候,撤销对应的TabPage
public void RemoveTabPage(TabPage tb)
{
this.MultiPageControl.TabPages.Remove(tb);
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 0);
}
}
//窗体创建的时候,创建对应的TabPage
public void AddTabPage(TabPage tb)
{
if (this.tabControl.TabPages.Count == 0)
{
this.TabControlSize = new Size(this.TabControlSize.Width, 20);
}
this.MultiPageControl.TabPages.Add(tb);
this.MultiPageControl.SelectedTab = tb;
}
//获取TabControl控件,以便子窗体调用(只读)
public TabControl MultiPageControl
{
get
{
return this.tabControl;
}
}
//获取TabControl控件的Size属性,以便子窗体调用
public Size TabControlSize
{
get
{
return this.tabControl.Size;
}
set
{
this.tabControl.Size = value;
}
}
对应子窗体,每个窗体打开的时候,主窗体都需要创建一个TabPage,关闭的时候,都要撤销一个TabPage,也就是说所有的子窗体都有共同的属性和功能,所以我设置了一个父窗体来实现这些功能,子窗体通过继承而拥有这些功能。
private frmMain frMain = null;
private TabPage tabPage = new TabPage();
private void frmTabMain_ParentChanged(object sender, EventArgs e)
{
if (this.MdiParent != null)
{
this.tabPage.Text = this.Text + " ";
frMain = this.MdiParent as frmMain;//获取主窗体
frMain.AddTabPage(tabPage);//调用主窗体方法,创建一个TabPage
}
}
//窗体被激活,对应的TabPage也呈选中状态
private void frmTabMain_Enter(object sender, EventArgs e)
{
if (this.frMain != null)
{
for (int i = 0; i < this.frMain.MdiChildren.Length; i++)
{
if (this.frMain.MdiChildren[i] == this)
{
this.frMain.MultiPageControl.SelectedIndex = i;
}
}
}
}
//窗体关闭,调用主窗体方法,撤销对应TabPage
private void frmTabTitleMain_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
this.frMain.RemoveTabPage(tabPage);
}
//窗体加载的时候,将窗体的标题赋给对应的TabPage
private void frmTabMain_Load(object sender, EventArgs e)
{
// this.tabPage.Text = this.Text;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个你要看是什么事件了
如果你所指的同一个事件 是 IndexChange 事件 我认为在逻辑上是没有问题的
因为 的确 你选中不同的选项 索引改变了
当然触发的是同一个事件
如果你说的是 Click 事件
那肯定不是同一个事件
毕竟两个选项卡 是两个对象
对应每个对象当然有自己的click 事件
如果你所指的同一个事件 是 IndexChange 事件 我认为在逻辑上是没有问题的
因为 的确 你选中不同的选项 索引改变了
当然触发的是同一个事件
如果你说的是 Click 事件
那肯定不是同一个事件
毕竟两个选项卡 是两个对象
对应每个对象当然有自己的click 事件
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没记错的话可以使用 TabPageIndex=0 或 1 来分开写代码
if(TabPageIndex==0)
{点A后的动作}
else if(TabPageIndex==1)
{点B后的动作}
...
else
if(TabPageIndex==0)
{点A后的动作}
else if(TabPageIndex==1)
{点B后的动作}
...
else
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
采纳吧
它有一个SelectedTab ,能知道你选的是哪个tab
你要加个判断if(tabcontrol1.SelectedTab ==tab1)
它有一个SelectedTab ,能知道你选的是哪个tab
你要加个判断if(tabcontrol1.SelectedTab ==tab1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询