1.c#裡面的tabcontrol控制項沒有關閉按鈕,而且很難看。
2.有一些已經做好的第三方控制項,但是收費。
3.由於我的故障樹推理診斷專案在繪圖的時候允許同時開啟多個文件進行操作,就要實現類似於瀏覽器的多標籤功能,而且要可以關閉。
4.所以自己寫乙個類繼承tabcontrol類,然後重寫一些裡面的方法即可實現。
5.特色:有關閉按鈕,標籤有背景顏色,選中的標籤和沒選中的顏色不一樣,實現滑鼠中鍵和右鍵的功能
先看我的專案中的完整**,有很多**是我的專案需要,可根據你的專案需求刪減,核心的**後面詳細解釋:
複製** **如下:
///
/// 重寫的tabcontrol控制項 帶關閉按鈕
///
public class mytabcontrol : tabcontrol
///
/// 設定父視窗
///
/// 畫圖視窗
public void setfather(form_paint fp)
///
/// 重寫的繪製事件
///
///
protected override void ondrawitem(drawitemeventargs e)//重寫繪製事件。
else//非選中的
}protected override void onmouseclick(mouseeventargs e)
else if (response == system.windows.forms.dialogresult.cancel)//點選取消或者關閉
}if (this.tabcount == 1)//是最後乙個選項卡,直接關閉父介面,即畫圖介面
else//不是最後乙個}}
#endregion
#region 右鍵 選中
else if (e.button == mousebuttons.right) // 右鍵選中}}
#endregion
#region 中鍵 選中 關閉
else if (e.button == mousebuttons.middle)//滑鼠中鍵關閉
else if (response == system.windows.forms.dialogresult.cancel)//點選取消或者關閉
}if (this.tabcount == 1)//是最後乙個選項卡,直接關閉父介面,即畫圖介面
else//不是最後乙個
break;}}
}#endregion}}
實現關閉按鈕的關鍵**是重寫ondrawitem(drawitemeventargs e)方法:
複製** **如下:
protected override void ondrawitem(drawitemeventargs e)//重寫繪製事件。
else//非選中的
}其中的if-else是用來判斷當前選項卡是否是選中的,使選中的顏色和未選中的不一樣,專案中不需要的可以去除。
具體實現關閉功能的原理是重寫protected override void onmouseclick(mouseeventargs e)方法,左鍵單擊會觸發對應事件,判斷單擊的區域位置是否在關閉按鈕的區域,實現關閉功能。另外有對中鍵和右鍵的處理,根據你的專案,修改對應按鈕事件下的**即可。
複製** **如下:
protected override void onmouseclick(mouseeventargs e)
else if (response == system.windows.forms.dialogresult.cancel)//點選取消或者關閉
}if (this.tabcount == 1)//是最後乙個選項卡,直接關閉父介面,即畫圖介面
else//不是最後乙個}}
#endregion
#region 右鍵 選中
else if (e.button == mousebuttons.right) // 右鍵選中}}
#endregion
#region 中鍵 選中 關閉
else if (e.button == mousebuttons.middle)//滑鼠中鍵關閉
else if (response == system.windows.forms.dialogresult.cancel)//點選取消或者關閉
}if (this.tabcount == 1)//是最後乙個選項卡,直接關閉父介面,即畫圖介面
else//不是最後乙個
break;}}
}#endregion
}寫完之後如何使用呢???
在你的窗體上拖乙個tabcontrol,然後開啟對應窗體**檔案的.designer.cs檔案裡找到private void initializecomponent()方法,然後找到裡面對應的tabcontrol的定義語句即 this.tabcontrol =。。。。改成this.tabcontrol = new mytabcontrol();如果想傳參,就在前面重寫mytabcontrol時加入帶參的建構函式(我程式設計客棧的就帶有引數)。
值得一提的是.designer.cs檔案裡找到private void initializecomponent()方法都是程式根據你的視覺化介面設計自動生成的,所以每次你在視覺化的設計環境下重新編輯了,這裡就會重新生成,所以你得手動再次改一下this.tabcontrol = new mytabcontrol();
我的程式效果如下
本文標題: c#重寫tabcontrol控制項實現關閉按鈕的方法
本文位址:
c 控制項編寫 (2)重寫乙個TabControl
在重寫tabcontrol的時候我們最先想到的是設定 this.drawmode tabdrawmode.ownerdrawfixed 然後重寫 protected override void ondrawitem drawitemeventargs e 這樣重寫後只是重寫選項卡上的區域,這個區域並...
VC控制項 Tab Control
1 新增上乙個tab control 控制項 為這個控制項新增乙個變數,如 m tabctrl 2 建立兩個新的對話方塊資源,其屬性作如下修改 border none 邊界為空,這樣它就沒了標題欄 style child 這樣這個模板就可以當作另乙個視窗的子視窗了。可在上面加一些控制項,具體操作跟普...
新增Tab Control控制項
本文講述在普通對話方塊上新增標籤的簡單示例 第一步拖乙個tab control到對話方塊上並新增變數m tabctrl 第二步新增兩個對話方塊資源idd dialog1,idd dialog2並將style為child,border為none,再分別為其新增對應的基於cdialog m page1,...