看到有很多TabControl类似的控件,界面友好,具有更多的其他功能,比如关闭,所以进行自己上网搜了一下,然后自己进行实践,有了如下内容。
如有错误之处,请指正。
1.Graphics不懂,看Graphics类详解
2.首先了解TabControl这个控件。
属性:
1.Alignment
获取或设置选项卡在其中对齐的控件区域(例如,顶部边缘)。
即选项卡的显示位置。
2.Appearance
获取或设置控件选项卡的可视外观。
即选项卡的样式,TabApperance->Menu;
3.HotTrack
获取或设置一个值,该值指示在鼠标移到控件的选项卡时,这些选项卡是否更改外观。
4.ImageList
获取或设置在控件的选项卡上显示的图像。
5.ItemSize
获取或设置控件的选项卡的大小。
6.RightToLeftLayout
获取或设置一个值,该值指示是否可以显示一行以上的选项卡。
7.RowCount
获取控件的选项卡条中当前正显示的行数。
8.SelectedIndex
获取或设置当前选定的选项卡页的索引
9.SelectedTab
获取或设置当前选定的选项卡页。
10.ShowToolTips
获取或设置一个值,该值指示当鼠标移到选项卡上时是否显示该选项卡的“工具提示”。
11.SizeMode
获取或设置调整控件的选项卡大小的方式。
12.TabCount
获取选项卡条中选项卡的数目。
13.TabPages
获取该选项卡控件中选项卡页的集合。
14.Padding
获取或设置控件的选项卡页上每个项周围的空间量。
函数:
1.DeselectTab
overload
使具有指定索引的选项卡后面的选项卡成为当前选项卡。
2.GetControl
获取指定位置的 System.Windows.Forms.TabPage 控件。
3.GetItems
获取一个由属于 System.Windows.Forms.TabControl 控件的 System.Windows.Forms.TabPage 控件构成的数组。
4.GetTabRect
返回该选项卡控件中的指定选项卡的边框。
5.GetToolTipText
获取指定的 System.Windows.Forms.TabPage 的工具提示。
6.RemoveAll
从该选项卡控件中移除所有的选项卡页和附加的控件
7.SelectTab
overload
使具有指定索引的选项卡成为当前选项卡。
事件:
1.DrawItem
如果 System.Windows.Forms.TabControl.DrawMode 属性设置为 System.Windows.Forms.TabDrawMode.OwnerDrawFixed,则当System.Windows.Forms.TabControl 需要绘制它的每一个选项卡时发生。
2.Deselected
如果 System.Windows.Forms.TabControl.DrawMode 属性设置为 System.Windows.Forms.TabDrawMode.OwnerDrawFixed,则当 System.Windows.Forms.TabControl 需要绘制它的每一个选项卡时发生。
3.SelectedIndexChanged
在 System.Windows.Forms.TabControl.SelectedIndex 属性更改后发生。
4.Selected
当选择某个选项卡时发生。
重写代码:
// 构造函数
public TabControlExtern()
: base()
{
base.DrawMode = TabDrawMode.OwnerDrawFixed;
//增加DrawItem事件
this.DrawItem += OverridOnDrawItem;
//增加MouseDown事件
this.MouseDown += OverridMouseDown;
InitializeComponent();
}
// 用于实际设置的TabControlMode
private TabControlMode _tabControlMode;
// 存储控件设置的Padding值
private Point _padding;
// 获取或设置绘制控件的选项卡的方式。
[Browsable(true)]
[DefaultValue(TabDrawMode.OwnerDrawFixed)]
[ReadOnly(true)]
public new TabDrawMode DrawMode
{
get
{
return base.DrawMode;
}
}
// 选项卡显示的图片
[Browsable(true)]
public Image TabImage { get; set; }
// TabControl显示方式
[Browsable(true)]
[DefaultValue(TabControlMode.Close)]
public TabControlMode StyleMode { get {
if (_tabControlMode == TabControlMode.Image && this.TabImage == null)
_tabControlMode = TabControlMode.Close;
return _tabControlMode;
}
set {
_tabControlMode=value;
if (_tabControlMode == TabControlMode.Image && this.TabImage == null)
_tabControlMode = TabControlMode.Close;
}
}
// 重写父类Padding
public new Point Padding
{
get {
switch (this.StyleMode)
{
case TabControlMode.Normal:
case TabControlMode.Close:
case TabControlMode.Image:
_padding = new Point(base.Padding.X - 4, base.Padding