using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace KUN.CONTROL.LIB.KTabControl
{
public partial class KDelTabControl : TabControl
{
const int CLOSE_SIZE = 15;
//tabPage标签图片
Bitmap image = Properties.Resources.close; public KDelTabControl()
{
InitializeComponent(); this.DrawMode = TabDrawMode.OwnerDrawFixed;
//this.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);
this.DrawItem += new DrawItemEventHandler(this.KDelTabControl_DrawItem);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.KDelTabControl_MouseDown);
} //绘制“X”号即关闭按钮
private void KDelTabControl_DrawItem(object sender, DrawItemEventArgs e)
{
try
{
Rectangle tab = this.GetTabRect(e.Index);
//先添加TabPage属性
e.Graphics.DrawString(this.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, tab.X + 2, tab.Y + 2);
//再画一个矩形框
using (Pen p = new Pen(Color.White))
{
tab.Offset(tab.Width - (CLOSE_SIZE + 3), 2);
tab.Width = CLOSE_SIZE;
tab.Height = CLOSE_SIZE;
e.Graphics.DrawRectangle(p, tab);
}
//填充矩形框
Color recColor = e.State == DrawItemState.Selected ? Color.White : Color.White;
using (Brush b = new SolidBrush(recColor))
{
e.Graphics.FillRectangle(b, tab);
}
//画关闭符号
using (Pen objpen = new Pen(Color.Black))
{
////=============================================
//自己画X
////"\"线
//Point p1 = new Point(myTabRect.X + 3, myTabRect.Y + 3);
//Point p2 = new Point(myTabRect.X + myTabRect.Width - 3, myTabRect.Y + myTabRect.Height - 3);
//e.Graphics.DrawLine(objpen, p1, p2);
////"/"线
//Point p3 = new Point(myTabRect.X + 3, myTabRect.Y + myTabRect.Height - 3);
//Point p4 = new Point(myTabRect.X + myTabRect.Width - 3, myTabRect.Y + 3);
//e.Graphics.DrawLine(objpen, p3, p4); ////=============================================
//使用图片
Bitmap bt = new Bitmap(image);
Point p5 = new Point(tab.X, 4);
e.Graphics.DrawImage(bt, p5);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);
}
e.Graphics.Dispose();
}
catch (Exception)
{ }
} private void KDelTabControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y;
//计算关闭区域
Rectangle tab = this.GetTabRect(this.SelectedIndex);
tab.Offset(tab.Width - (CLOSE_SIZE + 3), 2);
tab.Width = CLOSE_SIZE;
tab.Height = CLOSE_SIZE;
//如果鼠标在区域内就关闭选项卡
bool isClose = x > tab.X && x < tab.Right && y > tab.Y && y < tab.Bottom; if (isClose == true) this.TabPages.Remove(this.SelectedTab);
}
} }
}

  

最新文章

  1. JQuery中的siblings()是什么意思
  2. IIS 输入地址 目录浏览
  3. lua表排序
  4. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)
  5. EmgnCv进行轮廓寻找和计算物体凸包
  6. js-高级技术
  7. BZOJ 1123 BLO
  8. GIT免密码PUSH
  9. LSPCI具体解释分析
  10. iOS动画学习-视觉效果
  11. gunicorn geventworker 解析
  12. 终于明白了 C# 中 Task.Yield 的用途
  13. 转:三款免费好用的Gif录屏神器
  14. Keras + LSTM 做回归demo
  15. C#实现多个PDF合并及去除文字水印功能
  16. interface21 - web - Log4jConfigListener(Log4j加载流程)
  17. 063 日志分析(pv  uv  登录人数  游客人数  平均访问时间  二跳率  独立IP)
  18. [leetcode]658. Find K Closest Elements绝对距离最近的K个元素
  19. jquery-chosen设置默认值
  20. EBS中比较复杂的trace方法

热门文章

  1. 使用Optioanl优雅的处理空值
  2. Java基础——接口和抽象类
  3. 【DSP开发】DSP能用VS2010生成的链接库文件吗?
  4. VC程序运行时间测试函数
  5. Odoo13 新变化:存货核算
  6. redis设置密码和其它服务器连接
  7. Scala当中什么是RDD(Resilient Distributed Datasets)弹性分布式数据集
  8. (八)springMvc 的参数绑定
  9. N分成不同的数相乘使答案最大
  10. PHP max_input_var设为了1000导致post数组太多时无法接受后面的参数值