打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#重绘TabControl控件的源码 - C# - 编程开发 - 伊甸网
1using System;

  2 using System.Collections.Generic;

  3 using System.ComponentModel;

  4 using System.Data;

  5 using System.Drawing;

  6 using System.Linq;

  7 using System.Text;

  8 using System.Windows.Forms;

  9

  10

  11 namespace TabControlTest

  12 {

  13     public partial class Form1 : Form

  14     {

  15         public Form1()

  16         {

  17             InitializeComponent();

  18         }

  19

  20         const int CLOSE_SIZE = 15;

  21  //tabPage标签图片

  22         Bitmap image = new Bitmap("E:\1\2.jpg");

  23 //绘制“X”号即关闭按钮

  24         private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e)

  25         {

  26

  27             try

  28             {

  29                 Rectangle myTabRect = this.MainTabControl.GetTabRect(e.Index);

  30

  31                 //先添加 TabPage属性

  32                 e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text

  33                 , this.Font, SystemBrushes.ControlText, myTabRect.X + 2, myTabRect.Y + 2);

  34

  35                 //再画一个矩形框

  36                 using (Pen p = new Pen(Color.White))

  37                 {

  38                     myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2);

  39                     myTabRect.Width = CLOSE_SIZE;

  40                     myTabRect.Height = CLOSE_SIZE;

  41                     e.Graphics.DrawRectangle(p, myTabRect);

  42

  43                 }

  44

  45                 //填充矩形框

  46                 Color recColor = e.State == DrawItemState.Selected ? Color.White : Color.White;

  47                 using (Brush b = new SolidBrush(recColor))

  48                 {

  49                     e.Graphics.FillRectangle(b, myTabRect);

  50                 }

  51

  52                 //画关闭符号

  53                 using (Pen objpen = new Pen(Color.Black))

  54                 {

  55                     //""线

  56                     Point p1 = new Point(myTabRect.X + 3, myTabRect.Y + 3);

  57                     Point p2 = new Point(myTabRect.X + myTabRect.Width - 3, myTabRect.Y + myTabRect.Height - 3);

  58                     e.Graphics.DrawLine(objpen, p1, p2);

  59

  60                     //"/"线

  61                     Point p3 = new Point(myTabRect.X + 3, myTabRect.Y + myTabRect.Height - 3);

  62                     Point p4 = new Point(myTabRect.X + myTabRect.Width - 3, myTabRect.Y + 3);

  63                     e.Graphics.DrawLine(objpen, p3, p4);

  64                       ////=============================================

  65                     Bitmap bt = new Bitmap(image);

  66                     Point p5 = new Point(myTabRect.X-50, 4);

  67                     e.Graphics.DrawImage(bt, p5);

  68                     //e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);

  69                 }

  70

  71

本文地址:【伊甸网】http://www.edenw.com/tech/devdeloper/Cp/2010-07-18/4785.html

72                 //绘制小图标

  73                 //==============================================================================

  74                 //Bitmap bt = new Bitmap("E:\1\2.jpg");

  75                 //Point p5 = new Point(4, 4);

  76                 ////e.Graphics.DrawImage(bt, e.Bounds);

  77                 //e.Graphics.DrawImage(bt, p5);

  78                 //Pen pt = new Pen(Color.Red);

  79                 ////e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, e.Bounds);

  80                 //e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, p5);

  81

  82                 e.Graphics.Dispose();

  83             }

  84             catch (Exception)

  85             {

  86

  87             }

  88

  89

  90         }

  91         //=======================================================================

  92

  93 //关闭按钮功能

  94         private void MainTabControl_MouseDown(object sender, MouseEventArgs e)

  95         {

  96             if (e.Button == MouseButtons.Left)

  97             {

  98                 int x = e.X, y = e.Y;

  99

  100                 //计算关闭区域

  101                 Rectangle myTabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex);

  102

  103                 myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2);

  104                 myTabRect.Width = CLOSE_SIZE;

  105                 myTabRect.Height = CLOSE_SIZE;

  106

  107                 //如果鼠标在区域内就关闭选项卡

  108                 bool isClose = x > myTabRect.X && x < myTabRect.Right

  109                  && y > myTabRect.Y && y < myTabRect.Bottom;

  110

  111                 if (isClose == true)

  112                 {

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

  114                 }

  115             }

  116

  117

  118         }

  119 //初始化页面

  120         private void Form1_Load(object sender, EventArgs e)

  121         {

  122             //清空控件

  123             //this.MainTabControl.TabPages.Clear();

  124             //绘制的方式 OwnerDrawFixed表示由窗体绘制大小也一样

  125             this.MainTabControl.DrawMode = TabDrawMode.OwnerDrawFixed;

  126             this.MainTabControl.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);

  127             this.MainTabControl.DrawItem += new DrawItemEventHandler(this.MainTabControl_DrawItem);

  128             this.MainTabControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);

  129         }

  130

  131  //添加新的tabPage并修改所有 tabPage标签上面的图片

  132         private void button1_Click(object sender, EventArgs e)

  133         {

  134             TabPage tabtage=new TabPage ();

  135             MainTabControl.TabPages.Add(tabtage);

  136             MainTabControl.SelectedTab = tabtage;

  137             image = new Bitmap("E:\1\3.jpg");

  138

  139

  140         }

  141 //关闭选中的tabPage

  142         private void button2_Click(object sender, EventArgs e)

  143         {

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

  145         }

  146

  147

  148

  149     }

  150 }

本文地址:【伊甸网】http://www.edenw.com/tech/devdeloper/Cp/2010-07-18/4785.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# GDI 使用操作、入门解析
使用GDI+对图像处理的一些C#代码
C# Graphics 绘图(及Color、Pen、Brush)
.net 组件
C# 智能AI五子棋(一)
C# webBrowser控件使用心得
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服