博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#重绘TabControl控件的源码(转)
阅读量:5975 次
发布时间:2019-06-20

本文共 4412 字,大约阅读时间需要 14 分钟。

ExpandedBlockStart.gif
代码
  1
using
 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
 
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
 }

转载于:https://www.cnblogs.com/a12-3/archive/2010/07/17/1779366.html

你可能感兴趣的文章
puppet最新源码包安装学习笔记
查看>>
烂泥:kickstart无人值守安装CentOS6.5
查看>>
Windows Phone 8 开发资源汇总
查看>>
互联网趋势关键词:交流,为价值付费,资源整合
查看>>
阿里钉钉,马云旗下的又一个千亿美金产品?
查看>>
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
查看>>
熟练掌握Word2003中的突出显示功能
查看>>
编码过程中的问题总结
查看>>
网页与APP中那些优美的登陆表单
查看>>
快速幂取模模板
查看>>
Git:配置
查看>>
神经系统知识普及
查看>>
Spring可扩展Schema标签
查看>>
c++ STL unique , unique_copy函数
查看>>
函数模板的使用说明
查看>>
http://miicaa.yopwork.com/help/overall/
查看>>
浅谈关于特征选择算法与Relief的实现
查看>>
Android 通过局域网udp广播自动建立socket连接
查看>>
Python按行输出文件内容具体解释及延伸
查看>>
mybatis-spring 项目简介
查看>>