C#利用tabControl控件实现多窗体嵌入及关闭

创建一个主窗体(Formmain)、两个副窗体(Form1,Form2);在主窗体中分别添加一个menuStrip控件、tabControl控件,并在menu控件上添加一个主菜单和两个子菜单,如下图:

继而,选中tabControl控件属性修改 DrawMode = OwnerDrawFixed,再根据如下代码添加即可:

public void Add_TabPage(string str, Form myForm)

{

if (tabControlCheckHave(this.MainTabControl, str))

{

return;

}

else

{

MainTabControl.TabPages.Add(str);

MainTabControl.SelectTab(MainTabControl.TabPages.Count - 1);

myForm.FormBorderStyle = FormBorderStyle.None;

myForm.Dock = DockStyle.Fill;

myForm.TopLevel = false;

myForm.Show();

myForm.Parent = MainTabControl.SelectedTab;

}

}

public bool tabControlCheckHave(System.Windows.Forms.TabControl tab, String tabName)

{

for (int i = 0; i < tab.TabCount; i++)

{

if (tab.TabPages[i].Text == tabName)

{

tab.SelectedIndex = i;

return true;

}

}

return false;

}

private void form1ToolStripMenuItem_Click(object sender, EventArgs e)

{

Form1 f1= new Form1();

Add_TabPage("f1中华人民共和国窗体  ", f1);

}

private void form2ToolStripMenuItem_Click(object sender, EventArgs e)

{

Form2 f2 = new Form2();

Add_TabPage("f2朝鲜窗体  ", f2);

}

private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e)

{

/*如果将 DrawMode 属性设置为 OwnerDrawFixed,

则每当 TabControl 需要绘制它的一个选项卡时,它就会引发 DrawItem 事件*/

try

{

this.MainTabControl.TabPages[e.Index].BackColor = Color.LightBlue;

Rectangle tabRect = this.MainTabControl.GetTabRect(e.Index);

e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, (float)(tabRect.X + 2), (float)(tabRect.Y + 2));

using (Pen pen = new Pen(Color.White))

{

tabRect.Offset(tabRect.Width - 15, 2);

tabRect.Width = 15;

tabRect.Height = 15;

e.Graphics.DrawRectangle(pen, tabRect);

}

Color color = (e.State == DrawItemState.Selected) ? Color.LightBlue : Color.White;

using (Brush brush = new SolidBrush(color))

{

e.Graphics.FillRectangle(brush, tabRect);

}

using (Pen pen2 = new Pen(Color.Red))

{

Point point = new Point(tabRect.X + 3, tabRect.Y + 3);

Point point2 = new Point((tabRect.X + tabRect.Width) - 3, (tabRect.Y + tabRect.Height) - 3);

e.Graphics.DrawLine(pen2, point, point2);

Point point3 = new Point(tabRect.X + 3, (tabRect.Y + tabRect.Height) - 3);

Point point4 = new Point((tabRect.X + tabRect.Width) - 3, tabRect.Y + 3);

e.Graphics.DrawLine(pen2, point3, point4);

}

e.Graphics.Dispose();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void MainTabControl_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{  www.2cto.com

int x = e.X;

int y = e.Y;

Rectangle tabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex);

tabRect.Offset(tabRect.Width - 0x12, 2);

tabRect.Width = 15;

tabRect.Height = 15;

if ((((x > tabRect.X) && (x < tabRect.Right)) && (y > tabRect.Y)) && (y < tabRect.Bottom))

{

this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab);

}

}

}

==

出处:http://blog.csdn.net/w1wqw/article/details/44356439

时间: 2024-10-18 20:47:25

C#利用tabControl控件实现多窗体嵌入及关闭的相关文章

tabcontrol 控件的标签的隐藏【C#】

[方法一] 由于最近的项目需要,使用TabControl控件开发一个数据库分布同步向导,在最后封装时发现TabControl控件没有现成的隐藏标签的方法和属性:真是急煞人也!想办法解决吧.互联网的功能就是强大,虽然没有找到现成的解决方法,但我也了解的差不多了.经过尝试可以以如下方式实现TabControl的标签隐藏: 在窗体Load事件中添加: [c-sharp] view plaincopy this.tabControl1.Region = new Region(new RectangleF

隐藏C#的TabControl控件的选项卡TabPage

在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).TabPage类明明提供了一个Hide方法,用在代码中却没有任何效果,甚是奇怪.无奈之余,只好考虑另辟途径.方法一:设置该TabPage的父容器为null 即可,如TabPage.Parent = null .如需显示该TabPage,设置其父容器为对应的TabControl即可.方法二:利用TabControl的TabPages属性,它是TabPage对象的集合,调用集合的Remove(TabControl.TabP

WPF随笔之 控件根据设定的显示行数列数填充控件并自适应窗体大小(多绑定MVVM方式实现)

(效果图,如见最下面) 需求:根据设置的行数列数,控制展示控件个数,并且填充的控件们大小刚刚好自适应填充满固定的区域,并且调整窗体大小的时候控件动态自适应窗体大小,即自适应大小并不显示滚动条(比如,设置了1行1列,则第一页显示一个控件,如设置了2行2列,则第一页显示第一行2个控件,第二行2个控件). 解决方案,我总结有3 1.在cs代码里面动态生成Grid控件,根据设定的行列动态生成行列,将控件自适应宽高填充进去 2.固定Grid.使用WrapPanel排序,当Grid实际宽高发生改变时,动态计

winform中,如何控制控件位置随窗体的大小改变而改变

winform中,如何控制控件位置随窗体的大小改变而改变 有如下3种方法: 方法1 [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MarkPrint

TabControl控件用法图解[转载]

1.创建一个基于对话框的MFC工程,名称设置为"My". 2.在自动生成的对话框模板中,删除"TODO: Place dialog controls here."静态文本框."OK"按钮和"Cancel"按钮. 在对话框资源上从工具箱中添加上一个TabControl控件: 3. 根据需要修改一下属性,然后右击控件,为这个控件添加一个变量,将此控件跟一个CTabCtrl类变量绑定在一起,这里设为m_tabctrl 4. 创建两个

[改善] dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题

问题:dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题 修改源码:ceffmx.pas 找到 procedure TCustomChromiumFMX.Resize; 修改如下: procedure TCustomChromiumFMX.Resize; var brws: ICefBrowser; b: TBitmap; begin inherited; if not (csDesigning in ComponentState) then begin brws :

WPF TabControl控件-事件相关问题

TabControl控件的TabItem的Content元素,例如:DataGrid控件,在对事件的处理时,需要对事件的源引起关注,当需要处理DataGrid的事件时,事件会传递到TabControl中,解决这种问题的方法如下: 方法一:判断触发此事件的源是谁,根据事件的源再做相应处理 private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is Tab

独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体

独家原创,拖拽任意控件移动任意目标,拖拽控件移动整个窗体,在无边框窗体及其友好的实现拖拽移动窗体 http://www.cnblogs.com/vonly/ only原创首发,vonly.net 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Configuration; 5 using System.Diagnostics; 6 using Sys

利用浏览器控件解决数据抓取的登录登录

1:浏览器登录网址,进行登录,进入系统 2:获取浏览器的cookie信息,用程序开始进行数据的抓取. 遇到的问题是怎么把浏览器的cookie信息读取出来,可以使用InternetGetCookieEx这个Win API来取得httponly的Cookie信息. 代码如下: 1 [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 2 static extern bool InternetGetCo