先看下这个效果
给你个思路:
重写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中文网其他相关文章!