加入到tabcontrol里
创建tabControl1_DrawItem事件,还有就是开启drawitem事件
*只有DrawMode等于OwnerDrawFixed时,才会在绘制选项卡时发生DrawItem事件
#region 在tabControl 加入需要使用的DrawItem,MouseDown 事件
/// <summary>
///tabControl挂载到对应的DrawItem,MouseDown
/// </summary>
/// <param name="TBC"></param>
public void TabCSetEvents(TabControl TBC)
{
TBC.DrawMode = TabDrawMode.OwnerDrawFixed;
TBC.SizeMode = TabSizeMode.Fixed; //ItemSize起作用
TBC.Alignment = TabAlignment.Top;
TBC.Multiline = true;
TBC.ItemSize = new Size(110, 26);//设置item大小
TBC.DrawItem += new DrawItemEventHandler(TabControl_DrawItem);
TBC.MouseDown += new MouseEventHandler(TabControl_MouseDown);
}
const int CLOSE_SIZE = 12;// 设定加上去的图标大小
public void TabControl_DrawItem(object sender, DrawItemEventArgs e)
{
try
{
TabControl ThisTab = sender as TabControl;
标签背景填充颜色
SolidBrush BackBrush = new SolidBrush(Color.FromArgb(5, 131, 205));
//标签文字填充颜色
SolidBrush FrontBrush = new SolidBrush(Color.Black);
//获取当前Tab选项卡的绘图区域
Rectangle myTabRect = ThisTab.GetTabRect(e.Index);
//绘制标签头背景色
using (Brush brBack = new SolidBrush(Color.White))
{
if (e.Index == ThisTab.SelectedIndex)
{
e.Graphics.FillRectangle(brBack, myTabRect); //设置当前选中的tabgage的背景色
}
}
StringFormat StringF = new StringFormat();
//设置文字对齐方式
StringF.Alignment = StringAlignment.Near;
StringF.LineAlignment = StringAlignment.Center;
for (int i = 0; i < ThisTab.TabPages.Count; i++)
{
//获取标签头工作区域
Rectangle Rec = ThisTab.GetTabRect(i);
if (ThisTab.SelectedIndex == i)//选中的item更改颜色
{
//绘制标签头文字
e.Graphics.DrawString(ThisTab.TabPages[i].Text, new Font("微软雅黑", 11), FrontBrush, Rec, StringF);
}
else
{
//绘制标签头背景颜色
//e.Graphics.FillRectangle(BackBrush, Rec);
e.Graphics.DrawString(ThisTab.TabPages[i].Text, new Font("微软雅黑", 11), FrontBrush, Rec, StringF);
}
}
//先添加TabPage属性
//e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, myTabRect.X + 2, myTabRect.Y + 2);
//再画一个矩形框
using (Pen p = new Pen(Color.Transparent))
{
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2);
myTabRect.Width = CLOSE_SIZE;
myTabRect.Height = CLOSE_SIZE;
e.Graphics.DrawRectangle(p, myTabRect);
}
//填充矩形框
Color recColor = (e.State == DrawItemState.Selected) ? Color.Transparent : Color.Transparent;
using (Brush b = new SolidBrush(recColor))
{
e.Graphics.FillRectangle(b, myTabRect);
}
//画Tab选项卡右上方关闭按钮
using (Pen objpen = new Pen(Color.Blue, 1.8f))
{
//自己画X
//"\"线
Point p1 = new Point(myTabRect.X + 10, myTabRect.Y + 10);
Point p2 = new Point(myTabRect.X + myTabRect.Width - 10, myTabRect.Y + myTabRect.Height - 10);
e.Graphics.DrawLine(objpen, p1, p2);
//"/"线
Point p3 = new Point(myTabRect.X + 10, myTabRect.Y + myTabRect.Height - 10);
Point p4 = new Point(myTabRect.X + myTabRect.Width - 10, myTabRect.Y + 10);
e.Graphics.DrawLine(objpen, p3, p4);
使用图片
//Bitmap bt = new Bitmap(image);
//Point p5 = new Point(myTabRect.X, 4);//获取绘图区域的开始坐标位置
//e.Graphics.DrawImage(bt, p5);
}
e.Graphics.Dispose();
}
catch (Exception)
{
}
}
private void TabControl_MouseDown(object sender, MouseEventArgs e)
{
TabControl ThisTab = sender as TabControl;
if (ThisTab.TabCount == 0)
{
return;
}
if (!String.IsNullOrEmpty(ThisTab.SelectedTab.Text))
{
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y;
//计算关闭区域
Rectangle myTabRect = ThisTab.GetTabRect(ThisTab.SelectedIndex); ;
myTabRect.Offset(myTabRect.Width - 0x12, 2);
myTabRect.Width = CLOSE_SIZE;
myTabRect.Height = CLOSE_SIZE;
//如果鼠标在区域内就关闭选项卡
bool isClose = x > myTabRect.X && x < myTabRect.Right && y > myTabRect.Y && y < myTabRect.Bottom;
if (isClose == true)
{
ThisTab.TabPages.Remove(ThisTab.SelectedTab);
}
}
}
}
#endregion
#region TabControl下加入Frm界面
/// <summary>
/// 加载相应界面
/// </summary>
/// <param name="frm">点击的窗体</param>
public static void AddTabPagesByForm(Form frm,TabControl ThisTBC)
{
if (frm != null && ErgodicModiForm(frm.Name, ThisTBC))
{
//if (Power(frm.Text)) return;
frm.TopLevel = false; //这个必须有不然会提示:"不能向tabControl中添加顶级控件"
frm.FormBorderStyle = FormBorderStyle.None;
frm.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
frm.Dock = DockStyle.Fill;
TabPage tab = new TabPage();
tab.Name = frm.Name;
tab.Text = frm.Text;
tab.Controls.Add(frm);
ThisTBC.TabPages.Add(tab);
ThisTBC.SelectedTab = tab;
frm.Show();//这个必须有,不然显示不出来
}
}
/// </summary>
/// <param name="MainTabControlKey">选项卡的键值</param>
/// <param name="objTabControl">要添加到的TabControl对象</param>
/// <returns></returns>
public static Boolean ErgodicModiForm(string MainTabControlKey, TabControl objTabControl)
{
//遍历选项卡判断是否存在该子窗体
foreach (Control con in objTabControl.Controls)
{
TabPage tp = con as TabPage;
if (tp.Name == MainTabControlKey)
{
objTabControl.SelectedTab = tp;
return false;//存在
}
}
return true;//不存在
}
#endregion
操作方法:
1 初始化 tabcontrol
Common.ControlsSet SetControls = new Common.ControlsSet();
SetControls.TabCSetEvents(TabMain);
2,使用方法将form放入tab中
注意:在tabItem上显示的是form的Text
Common.ControlsSet.AddTabPagesByForm(CreateFormById(ThisBtM),TabMain);