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 = 15; 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 + 2, myTabRect.Y + 2); //再畫一個矩形框 using (Pen p = new Pen(Color.White)) { myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2); 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 + 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(myTabRect.X - 50, 4); 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 + 3), 2); 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標簽,添加圖片及關閉按鈕 2009-12-15 來自:網上整理 字體大小:【大 中 小】 摘要:本文介紹C#重繪TabControl的Tabpage標簽,添加圖片及關閉按鈕,並提供完整的實現代碼。 以下就是C#重繪TabControl控件的源碼: 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 } C#重繪TabControl的Tabpage標簽,添加圖片及關閉按鈕就像你介紹到這里了,希望對你有所幫助。
C#重繪TabControl控件的源碼

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