C#重绘TabControl
C#重绘TabControl的Tabpage标签,添加图片及关闭按钮
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace TabControlTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} const int CLOSE_SIZE = ;
Bitmap image = new Bitmap("ONE.ico"); private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e)
{
try
{
Rectangle myTabRect = this.MainTabControl.GetTabRect(e.Index); //先添加TabPage属性
e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text
, this.Font, SystemBrushes.ControlText, myTabRect.X + , myTabRect.Y + ); //再画一个矩形框
using (Pen p = new Pen(Color.White))
{
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + ), );
myTabRect.Width = CLOSE_SIZE;
myTabRect.Height = CLOSE_SIZE;
e.Graphics.DrawRectangle(p, myTabRect); } //填充矩形框
Color recColor = e.State == DrawItemState.Selected ? Color.White : Color.White;
using (Brush b = new SolidBrush(recColor))
{
e.Graphics.FillRectangle(b, myTabRect);
} //画关闭符号
using (Pen objpen = new Pen(Color.Black))
{
//"\"线
Point p1 = new Point(myTabRect.X + , myTabRect.Y + );
Point p2 = new Point(myTabRect.X + myTabRect.Width - , myTabRect.Y + myTabRect.Height - );
e.Graphics.DrawLine(objpen, p1, p2); //"/"线
Point p3 = new Point(myTabRect.X + , myTabRect.Y + myTabRect.Height - );
Point p4 = new Point(myTabRect.X + myTabRect.Width - , myTabRect.Y + );
e.Graphics.DrawLine(objpen, p3, p4);
////=============================================
Bitmap bt = new Bitmap(image);
Point p5 = new Point(myTabRect.X - , );
e.Graphics.DrawImage(bt, p5);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);
} //绘制小图标
//==============================================================================
//Bitmap bt = new Bitmap("E:\\1\\2.jpg");
//Point p5 = new Point(4, 4);
////e.Graphics.DrawImage(bt, e.Bounds);
//e.Graphics.DrawImage(bt, p5);
//Pen pt = new Pen(Color.Red);
////e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, e.Bounds);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, p5); e.Graphics.Dispose();
}
catch
{ } } private void MainTabControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y; //计算关闭区域
Rectangle myTabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex); myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + ), );
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)
{
this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab);
}
} } //初始化页面
private void Form1_Load(object sender, EventArgs e)
{
//清空控件
//this.MainTabControl.TabPages.Clear();
//绘制的方式OwnerDrawFixed表示由窗体绘制大小也一样
this.MainTabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
this.MainTabControl.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);
this.MainTabControl.DrawItem += new DrawItemEventHandler(this.MainTabControl_DrawItem);
this.MainTabControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);
} //添加新的tabPage并修改所有tabPage标签上面的图片
private void button1_Click(object sender, EventArgs e)
{
TabPage tabtage = new TabPage();
MainTabControl.TabPages.Add(tabtage);
MainTabControl.SelectedTab = tabtage;
image = new Bitmap("ONE.ico"); }
//关闭选中的tabPage
private void button2_Click(object sender, EventArgs e)
{
MainTabControl.TabPages.Remove(MainTabControl.SelectedTab);
}
}
}
C#重绘TabControl的Tabpage标签,添加图片及关闭按钮2
C#重绘TabControl的Tabpage标签,添加图片及关闭按钮 -- 来自:网上整理 字体大小:【大 中 小】
摘要:本文介绍C#重绘TabControl的Tabpage标签,添加图片及关闭按钮,并提供完整的实现代码。 以下就是C#重绘TabControl控件的源码: using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace TabControlTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} const int CLOSE_SIZE = ;
//tabPage标签图片
Bitmap image = new Bitmap("E:\\1\\2.jpg");
//绘制“X”号即关闭按钮
private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e)
{ try
{
Rectangle myTabRect = this.MainTabControl.GetTabRect(e.Index); //先添加TabPage属性
e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text
, this.Font, SystemBrushes.ControlText, myTabRect.X + , myTabRect.Y + ); //再画一个矩形框
using (Pen p = new Pen(Color.White))
{
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + ), );
myTabRect.Width = CLOSE_SIZE;
myTabRect.Height = CLOSE_SIZE;
e.Graphics.DrawRectangle(p, myTabRect); } //填充矩形框
Color recColor = e.State == DrawItemState.Selected ? Color.White : Color.White;
using (Brush b = new SolidBrush(recColor))
{
e.Graphics.FillRectangle(b, myTabRect);
} //画关闭符号
using (Pen objpen = new Pen(Color.Black))
{
//"\"线
Point p1 = new Point(myTabRect.X + , myTabRect.Y + );
Point p2 = new Point(myTabRect.X + myTabRect.Width - , myTabRect.Y + myTabRect.Height - );
e.Graphics.DrawLine(objpen, p1, p2); //"/"线
Point p3 = new Point(myTabRect.X + , myTabRect.Y + myTabRect.Height - );
Point p4 = new Point(myTabRect.X + myTabRect.Width - , myTabRect.Y + );
e.Graphics.DrawLine(objpen, p3, p4);
////=============================================
Bitmap bt = new Bitmap(image);
Point p5 = new Point(myTabRect.X-, );
e.Graphics.DrawImage(bt, p5);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);
} //绘制小图标
//==============================================================================
//Bitmap bt = new Bitmap("E:\\1\\2.jpg");
//Point p5 = new Point(4, 4);
////e.Graphics.DrawImage(bt, e.Bounds);
//e.Graphics.DrawImage(bt, p5);
//Pen pt = new Pen(Color.Red);
////e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, e.Bounds);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, p5); e.Graphics.Dispose();
}
catch (Exception)
{ } }
//======================================================================= //关闭按钮功能
private void MainTabControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y; //计算关闭区域
Rectangle myTabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex); myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + ), );
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)
{
this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab);
}
} }
//初始化页面
private void Form1_Load(object sender, EventArgs e)
{
//清空控件
//this.MainTabControl.TabPages.Clear();
//绘制的方式OwnerDrawFixed表示由窗体绘制大小也一样
this.MainTabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
this.MainTabControl.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);
this.MainTabControl.DrawItem += new DrawItemEventHandler(this.MainTabControl_DrawItem);
this.MainTabControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);
} //添加新的tabPage并修改所有tabPage标签上面的图片
private void button1_Click(object sender, EventArgs e)
{
TabPage tabtage=new TabPage ();
MainTabControl.TabPages.Add(tabtage);
MainTabControl.SelectedTab = tabtage;
image = new Bitmap("E:\\1\\3.jpg"); }
//关闭选中的tabPage
private void button2_Click(object sender, EventArgs e)
{
MainTabControl.TabPages.Remove(MainTabControl.SelectedTab);
} }
} C#重绘TabControl的Tabpage标签,添加图片及关闭按钮就像你介绍到这里了,希望对你有所帮助。
C#重绘TabControl控件的源码
1using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TabControlTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
const int CLOSE_SIZE = ;
//tabPage标签图片
Bitmap image = new Bitmap("E:\\1\\2.jpg");
//绘制“X”号即关闭按钮
private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e)
{
try
{
Rectangle myTabRect = this.MainTabControl.GetTabRect(e.Index);
//先添加 TabPage属性
e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text
, this.Font, SystemBrushes.ControlText, myTabRect.X + , myTabRect.Y + );
//再画一个矩形框
using (Pen p = new Pen(Color.White))
{
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + ), );
myTabRect.Width = CLOSE_SIZE;
myTabRect.Height = CLOSE_SIZE;
e.Graphics.DrawRectangle(p, myTabRect);
}
//填充矩形框
Color recColor = e.State == DrawItemState.Selected ? Color.White : Color.White;
using (Brush b = new SolidBrush(recColor))
{
e.Graphics.FillRectangle(b, myTabRect);
}
//画关闭符号
using (Pen objpen = new Pen(Color.Black))
{
//"\"线
Point p1 = new Point(myTabRect.X + , myTabRect.Y + );
Point p2 = new Point(myTabRect.X + myTabRect.Width - , myTabRect.Y + myTabRect.Height - );
e.Graphics.DrawLine(objpen, p1, p2);
//"/"线
Point p3 = new Point(myTabRect.X + , myTabRect.Y + myTabRect.Height - );
Point p4 = new Point(myTabRect.X + myTabRect.Width - , myTabRect.Y + );
e.Graphics.DrawLine(objpen, p3, p4);
////=============================================
Bitmap bt = new Bitmap(image);
Point p5 = new Point(myTabRect.X-, );
e.Graphics.DrawImage(bt, p5);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);
}
//绘制小图标
//==============================================================================
//Bitmap bt = new Bitmap("E:\\1\\2.jpg");
//Point p5 = new Point(4, 4);
////e.Graphics.DrawImage(bt, e.Bounds);
//e.Graphics.DrawImage(bt, p5);
//Pen pt = new Pen(Color.Red);
////e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, e.Bounds);
//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, p5);
e.Graphics.Dispose();
}
catch (Exception)
{
}
}
//=======================================================================
//关闭按钮功能
private void MainTabControl_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int x = e.X, y = e.Y;
//计算关闭区域
Rectangle myTabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex);
myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + ), );
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)
{
this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab);
}
}
}
//初始化页面
private void Form1_Load(object sender, EventArgs e)
{
//清空控件
//this.MainTabControl.TabPages.Clear();
//绘制的方式 OwnerDrawFixed表示由窗体绘制大小也一样
this.MainTabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
this.MainTabControl.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);
this.MainTabControl.DrawItem += new DrawItemEventHandler(this.MainTabControl_DrawItem);
this.MainTabControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);
}
//添加新的tabPage并修改所有 tabPage标签上面的图片
private void button1_Click(object sender, EventArgs e)
{
TabPage tabtage=new TabPage ();
MainTabControl.TabPages.Add(tabtage);
MainTabControl.SelectedTab = tabtage;
image = new Bitmap("E:\\1\\3.jpg");
}
//关闭选中的tabPage
private void button2_Click(object sender, EventArgs e)
{
MainTabControl.TabPages.Remove(MainTabControl.SelectedTab);
}
}
}
C#重绘TabControl的更多相关文章
- C# 重绘tabControl,添加关闭按钮(页签)
C# 重绘tabControl,添加关闭按钮(页签) 调用方法 参数: /// <summary> /// 初始化 /// </summary> /// <param n ...
- WinForm中重绘TabControl选项卡标题
最近开发WinForm频繁使用了TabControl控件,这个控件的选项卡没有BackgroundImage这个属性,那么如何为其各个选项卡添加背景图片呢?(这里说的是每个TabPage的头部,也就是 ...
- C# 重绘tabControl,添加关闭按钮(续)
在上一篇随笔中,添加关闭按钮是可以实现 ,但细心一点就会发现,每次关闭一个选项卡,tableControl都会自动跳到第一个页面,显然 这不是我们想要的,为此,我修改了部分的代码.除此之外,我还添加了 ...
- 重绘TabControl
本文转载自:http://blog.csdn.net/conmajia/article/details/7596718 作者:野比 (conmajia@gmail.com) 时间:May, 2012 ...
- C# 自定义重绘TabControl
using System.Drawing; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Runti ...
- TabControl控件重绘
原文地址:http://www.codeproject.com/Articles/91387/Painting-Your-Own-Tabs-Second-Edition 在网上看到重绘TabContr ...
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- 关于repaint(重绘)和reflow( 回流)
repaint就是重绘,reflow就是回流.repaint主要是针对某一个DOM元素进行的重绘,reflow则是回流,针对整个页面的重排 严重性: 在性能优先的前提下,性能消耗 reflow大于re ...
- MFC 滑动条的重绘
MFC自带的滑动条的样子是这样的. 比较难看,所以需要重绘下,重绘后的样子是这样的. 代码如下: CustomSliderCtr.h #pragma once // CCustomSliderCtr ...
随机推荐
- hdu 1576
老生常谈的问题 利用同余的思想 抽象出表达式 bx+9973y=n 然后用bx+9973y=1(题目给出了gcd(b,9973)=1) 求出基础解 y0 bx+9973y=n 的 基础解y=n*y0 ...
- jq之display:none与visible:hidden
http://www.cnblogs.com/linxiong945/p/4075146.html 今天学习到jquery的hide()部分时,突然有一个想法,jquery中的隐藏/显示部分的实现是给 ...
- Pytorch中nn.Dropout2d的作用
Pytorch中nn.Dropout2d的作用 首先,关于Dropout方法,这篇博文有详细的介绍.简单来说, 我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更 ...
- Laravel save部分字段失效的bug问题解决
问题描述:今天在编写api的更新部分,发现有部分字段怎么更新都更新不上去. 问题排查: 经过多次测试,发现每次提交只能更新部分字段,字段分别为:id,user_id,device_room_id,na ...
- Windows 7 系统下显示文件类型的扩展名和隐藏文件
一.显示扩展名 点击开始菜单 在搜索框中输入「文件夹选项」并单击 切换到「查看」栏,取消勾选「隐藏已知文件类型的扩展名」这一项 设置完成 ps: 你也可以通过单击下图位置进行相应操作来达到同样的效果 ...
- VUE神速搭建项目
1.npm install -g vue-cli 全局安装vue-cli脚手架 2.vue init webpack vueTest 初始化一个基于webpack的项目 3.cd vueTest 进入 ...
- IntelliJ IDEA 接口类跳转到实现类及实现类跳转到接口
接口和实现类的互相跳转是使用IntelliJ IDEA过程中常用的操作,在此记录一下: 1.Service接口跳转到实现类 操作:在接口类的方法上使用快捷键Ctrl+Alt+B,或者点击下图所示位置 ...
- js数组的所有方法
修改器方法 下面的这些方法会改变调用它们的对象自身的值: Array.prototype.copyWithin() 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值. Array.pr ...
- dhcpd.conf例解
ddns-update-style interim; //设置dhcp互动更新模式 ignore client-updates; //忽略客户端更新 #子网声明 subnet 192.168.12 ...
- python中的__init_subclass__是什么?
什么是__init_subclass__ class Hook: def __init_subclass__(cls, **kwargs): print("__init_subclass__ ...