C# TabControl重写

本文详细介绍了如何重写C#中的TabControl控件,涵盖了属性如Alignment、Appearance和HotTrack,以及函数如DeselectTab、SelectTab和RemoveAll,并提到了DrawItem和SelectedIndexChanged等关键事件。通过自定义重写,可以实现更丰富的选项卡样式和交互效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到有很多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.Y);
                        break;
                    case
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值