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);
}
} }
}

  

C# TabControl 带删除的更多相关文章

  1. 35.Android之带删除按钮EditText学习

    今天实现Android里自定义带删除功能的EditText,效果如下: 当输入内容时,EditText变为带有一个删除功能按钮的编辑框,如图: 实现代码很简单,直接上代码, 布局文件xml: < ...

  2. Gridview中 LinkButton删除以及自带删除

    <asp:LinkButton ID="lbtnDel" OnClientClick="return confirm('删除新闻会连同其下评论一起删除,是否删除?' ...

  3. iOS_绘制带删除线的Label

    效果图例如以下: 一个带删除线的文本标签,继承自UILabel 自绘代码过程例如以下: 1,重写控件的drawRect方法 2,首先得到上下文对象 3,设置颜色,并指定是填充(Fill)模式还是笔刷( ...

  4. [Android]自己定义带删除输入框

    在项目开发中,带删除button输入框也是人们经常常使用到的,该文章便介绍一下怎样创建一个带删除输入框.当中,须要解决的问题例如以下: a)创建自己定义editText类 b)在自己定义editTex ...

  5. 【NOIP2017练习】怎样打好隔膜(贪心,堆,带删除priority_queue)

    题意:OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:“我的手速虽然已经站在了人类的巅峰,但是打隔膜还是输.我换了很多队友,但是没有用.请问应该怎样打好隔膜?”长者回答:“你啊,Too ...

  6. 模拟邮箱输入邮箱地址、收藏标签。input框输入内容后回车,内容显示成小方块并带删除按钮。

    模拟邮箱输入邮箱地址.收藏标签: 文本框输入文字后按回车键或者分号键,输入框中的文字变成小块并带删除按钮和操作. 页面代码: <!DOCTYPE html> <%@ page lan ...

  7. Codeforces 948 数论推导 融雪前缀和二分check 01字典树带删除

    A. 全部空的放狗 B. 先O(NLOGNLOGN)处理出一个合数质因数中最大的质数是多少 因为p1 x1 x2的关系是 x2是p在x1之上的最小倍数 所以x1的范围是[x2-p+1,x2-1]要使最 ...

  8. 带删除小图标的EditText

    import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawa ...

  9. 带删除的EditText

    在安卓开发中EditText是比较常用的控件之一,那我们平常看到EditText填写了内容之后右边会出现一个删除的按钮,这样可以方便用户对其中文本清空操作,是非常人性化的,我们可以重写EditText ...

随机推荐

  1. jmeter解决乱码

    在jmeter.properties 这个文件里面 找到sampleresult.default.encoding=xx 后面xx改成utf-8,然后取消注释 解决jmeterbody里面中文显示不出 ...

  2. 敏捷管理的大概背景和Scrum的特性

    我们在转型Scrum敏捷开发时,一直会有一个很大的困惑问题,那就是我的团队适不适合使用敏捷项目管理工具和开发方式.我大概总结了下Scrum的大概样子可以参考下.总之敏捷管理不是口号,他只是一种工具,只 ...

  3. Day04:循环结构(while、do-while、for)

    Java 循环结构 - while ,do...while,for 反复执行一段相同或相似代码的格式. 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java ...

  4. Hydra(爆破神器)使用方法

    工具介绍 hydra是一个自动化的爆破工具,暴力破解弱密码,是一个支持众多协议的爆破工具,已经集成到KaliLinux中,直接在终端打开即可. hydra支持的服务有: POP3,SMB,RDP,SS ...

  5. 在Ubuntu里搭建spark环境

    注意:1.搭建环境:Ubuntu64位,Linux(也有Windows的,我还没空试)       2.一般的配置jdk.Scala等的路径环境是在/etc/profile里配置的,我自己搭建的时候发 ...

  6. QueryPerformanceFrequency 基本介绍精确获取时间

    精确获取时间: QueryPerformanceFrequency() - 基本介绍 类型:Win32API 原型:BOOL QueryPerformanceFrequency(LARGE_INTEG ...

  7. 解决SpringMVC拦截静态资源的问题

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...

  8. golang 二维切片

    初始化: res := make([][length]int, length), 例如: res := make([][2]int, 10) fmt.Println(res) 输出: [[0 0] [ ...

  9. 洛谷 题解 P1133 【教主的花园】

    $n<=10^5 $ O(n)算法 状态 dp[i][j][k]表示在第i个位置,种j*10的高度的树,且这棵树是否比相邻两棵树高 转移 dp[i][1][0]=max(dp[i-1][2][1 ...

  10. POJ 1161 Walls【floyd 以面为点建图】

    题目链接:http://poj.org/problem?id=1161 题目大意: 1.给出m个区域,n个俱乐部点.接下来是n个俱乐部点以及各个区域由什么点围成.求一个区域到各个俱乐部点的距离之和最小 ...