用代码为tabcontrol添加一个具有相同控件的选项卡,这个怎么实现?

用代码为tabcontrol添加一个具有相同控件的选项卡,这个怎么实现?,第1张

您好,tabControl1.TabPages.Add("ta")

tabcontrol里面有一个tabpages的属性.add(“选项卡的名字”)

tabControl1.TabPages.Add("ta")//添加一个名字为ta的选项卡

tabControl1.TabPages.Clear()//移除所有的选项卡

tabControl1.TabPages.Remove(tabPage1)//移除指定的选项卡

tabControl1.TabPages.IndexOf(tabPage1)//获得选项卡tabPage1的索引值

tabControl1.TabPages.RemoveAt(1)//删除索引值为1的选项卡

tabControl1.TabPages.之后会d出许多方法 有ADD(添加)删除 全部删除等等....

至于移位 *** 作 没找到 不过你想移位的目的不过是像让某个选项卡优先显示 这样有一个方法能

初始化tabcontronl时先显示那个选项卡 我在找找看 如果找到了 在说给你

我研究了一下 原来是我考虑的太过复杂了 。

移位的话直接交换两个变量的值就行了:

TabPage t=null//先定义一个选项卡对象,

t = tabControl1.TabPages[1]//把选项卡2的值付给t ,

tabControl1.TabPages[1] = tabControl1.TabPages[0]//把选项卡1的值赋给选项卡2 。 tabControl1.TabPages[0] = t//在把t的值给把选项卡1。

这样就完成了 选项卡1和选项卡2位置的移位了。

在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 = 0i <this.MdiChildren.Lengthi++)

{

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 = 0i <this.MdiChildren.Lengthi++)

{

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 = 0i <this.frMain.MdiChildren.Lengthi++)

{

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

}

00TabPage tabPage1 = new TabPage()

00this.tabControl1.Controls.Add(this.tabPage1)

00

00tabPage1.Name = "tabPage1"

00tabPage1.TabIndex = 0

00tabPage1.Text = "tabPage1"

00TextBox textBox1 = new TextBox()

00textBox1.Location = new System.Drawing.Point(0, 0)

00textBox1.Name = "textBox1"

00Label label1 = new System.Windows.Forms.Label()

00label1.Location = new System.Drawing.Point(50, 41)

00label1.Name = "label1"

00tabPage1.Controls.Add(this.label1)

00tabPage1.Controls.Add(this.textBox1)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11177834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存