日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 重绘tabControl,添加关闭按钮(续)

發布時間:2023/12/20 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 重绘tabControl,添加关闭按钮(续) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一篇隨筆中,添加關閉按鈕是可以實現 ,但細心一點就會發現,每次關閉一個選項卡,tableControl都會自動跳到第一個頁面,顯然 這不是我們想要的,為此,我修改了部分的代碼。除此之外,我還添加了一些兩個新的方法,用于創建新的tablePage.以下是我實現 的類

#region 重繪tablecontrol的類(添加關閉頁面功能),ablepage的創建,以及窗體的附加public class DrawTabControl{TabControl tabControl1 = null;Font font1 = null;//打開和關閉的頁面索引int tabindex_show = 0;int tabindex_close = 0;public DrawTabControl() { }/// <summary>/// 初始化/// </summary>/// <param name="tabcontrol">TacControl控件</param>/// <param name="fo">主程序this.Font</param>public DrawTabControl(TabControl tabcontrol,Font fo){tabControl1 = tabcontrol;font1 = fo;}#region 關于tabcontrol的重繪const int CLOSE_SIZE = 15;//大小//tabPage標簽圖片Bitmap image = new Bitmap("D:\\power_003.png");public void ClearPage(){//清空控件//this.MainTabControl.TabPages.Clear();//繪制的方式OwnerDrawFixed表示由窗體繪制大小也一樣this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;this.tabControl1.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE - 8);this.tabControl1.DrawItem += new DrawItemEventHandler(this.tabControl1_DrawItem);this.tabControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tabControl1_MouseDown);}/// <summary>/// 產生新的窗體時觸發/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void tabControl1_DrawItem(object sender, DrawItemEventArgs e){try{Rectangle myTabRect = this.tabControl1.GetTabRect(e.Index);//先添加TabPage屬性 e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, this.font1, 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)){////=============================================//自己畫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(myTabRect.X, 4);//e.Graphics.DrawImage(bt, p5);//e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.font1, objpen.Brush, p5); }e.Graphics.Dispose();}catch (Exception){ }}/// <summary>/// 鼠標點擊選項卡時的觸發/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void tabControl1_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){int x = e.X, y = e.Y;//計算關閉區域 Rectangle myTabRect = this.tabControl1.GetTabRect(this.tabControl1.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){//判斷關閉的頁面索引是否比正在顯示的頁面的索引//如果關閉的頁面的索引大于或等于顯示正在顯示的頁面索引,剛tabindex_close的值為關閉的頁面的索引;//相反 的,剛tabindex_close則為tabindex_show-1; tabindex_close = this.tabControl1.SelectedIndex >= tabindex_show ? this.tabControl1.SelectedIndex : tabindex_close - 1;this.tabControl1.TabPages.Remove(this.tabControl1.SelectedTab);}else{tabindex_close = this.tabControl1.SelectedIndex;tabindex_show = this.tabControl1.SelectedIndex;}if (tabindex_close < tabindex_show){tabindex_show = tabindex_show - 1;}//顯示頁面try { this.tabControl1.SelectedTab = this.tabControl1.TabPages[tabindex_show]; }catch (Exception ex) { }Console.WriteLine("顯示頁面" + tabindex_show + "關閉頁面" + tabindex_close);}}#endregion #region 關于tablepage的創建,以及窗體的附加/// <summary>/// 創建新的選項卡/// </summary>/// <param name="ParentForm">父窗體</param>/// <param name="ChildForm">子窗體</param>/// <param name="Pagename">頁面名稱</param>public void CreatePage(Form ParentForm,Form ChildForm, string Pagename){ChildForm.MdiParent = ParentForm;ChildForm.Text = "第二個窗體";ChildForm.Dock = DockStyle.Fill;ChildForm.TopMost = true;ChildForm.FormBorderStyle = FormBorderStyle.None;TabPage tb1 = AddPage(Pagename);tb1.Controls.Add(ChildForm);this.tabControl1.Controls.Add(tb1);ChildForm.Show();}/// <summary>/// 添加選項卡/// </summary>/// <param name="PageName">頁面名稱</param>/// <returns>一個頁面</returns>public TabPage AddPage(string PageName){TabPage tabPage = new TabPage();tabPage.Location = new System.Drawing.Point(4, 21);tabPage.Name = PageName;tabPage.Padding = new System.Windows.Forms.Padding(3);tabPage.Size = new System.Drawing.Size(658, 410); tabPage.Text = PageName;tabPage.UseVisualStyleBackColor = true;return tabPage;}#endregion}#endregion

調用的方法,和上一篇的一樣,

DrawTabControl dtc=null; dtc=new DrawTabControl(tabControl1,this.Font); dtc.ClearPage();

上面的代碼是實例化了一個類,并調用ClearPage方法,注意,

1、在添加選項卡之前一定要調用ClearPage()這個方法;

2、this.Font 解釋為:System.Drawing.Font,它定義字符串的文本格式。具體作用還不太清楚,如果有懂的朋友,還望幫忙講解一下;

Form3 fo3 = new Form3(); dtc.CreatePage(this,fo3, "窗體");

上面的代碼 為創建選項卡,其中this為父窗體 ,fo3為子窗體 ,第三個參數為窗體名

轉載于:https://www.cnblogs.com/chcong/p/4312651.html

總結

以上是生活随笔為你收集整理的C# 重绘tabControl,添加关闭按钮(续)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。