先看下這個效果
#給你個想法:
重寫TabControl控件,重載OnPaint方法
public class CustomTabControl : TabControl
{
//......
protected override void OnPaint(PaintEventArgs e)
{
this.PaintTransparentBackground(e.Graphics, base.ClientRectangle);
this.PaintAllTheTabs(e);
this.PaintTheTabPageBorder(e);
this.PaintTheSelectedTab(e);
}
//......
}
建立一個MDI窗口,並新增一個ToolStrip控制項。
建立一個窗體的基底類別
public class BaseForm: Form{
protected ToolStrip toolStrip;
public static ListtoolStripItemList = new Lis();
protected void AddToolStrip(ToolStripItem toolStripItem){
toolStripItemList.add(toolStripItem);
if(toolStrip != null){
toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[]{ toolStripItem });
}
}
protected void SubToolStrip(string formName){
if(toolStrip != null){
foreach (ToolStripItem i in toolStripItemList){
if (i.Name == formName){
toolStrip1.Items.remove(i);
}
}
}
}
}
建立一個父窗體基底類別
public class MdiForm: BaseForm{
//在Mdi窗體中建立一個ToolStrip控制項 toolStrip1,並賦值給基底類別中的toolStrip
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
toolStrip = this.toolStrip1;
}
}
建立一個子窗體基底類別
public class ChildForm: BaseForm{
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
ToolStripItem toolStripItem = new ToolStripItem();
toolStripItem.Name = this.Name;
toolStripItem.Text = "xxxxxx";
AddToolStrip(toolStripItem);
}
protected override void OnFormClosed(FormClosedEventArgs e) {
base.OnFormClosed(e);
SubToolStrip(this.Name);
}
}
只是一個簡單思路,所有窗體同時繼承一個基類,在這個基類裡創建連個對象ToolStrip(在Mdi窗口上添加按鈕的控件),List(這裡為了簡單期間,用了一個簡單的List,如果要加上其他效果,例如某個窗體裡欄位改變,讓ToolStrip上的按鈕有不同的現實效果,圖片等等,你需要建立一個ToolStripButtonCollection)每次載入一個新的子窗體時,就在ToolStripButtonCollection增加一項,ToolStripButtonCollection會自動的再ToolStrip上增加一個按鈕,同樣ToolStripButtonCollection減少一項,ToolStrip會自動減少一個按鈕,這裡你還可以偵測ToolStripButtonCollection中的一些值,例如判斷欄位是否改變,是否說需要保存等等。
之後創建Mdi窗體,初始化基底類別裡的toolStrip;
之後建立子窗體,只要是從ChildForm繼承的子窗體,就會自動在Mdi視窗上建立一個以子窗體名稱命名的按鈕,非常類似你想要的效果,還有以上程式碼只是示範思路,重要的還是ToolStripButtonCollection這個類別的創建。
以上是如何在winform中實現圓角選項卡繪製的詳細內容。更多資訊請關注PHP中文網其他相關文章!