zoukankan      html  css  js  c++  java
  • C# Winfrom TabControl美化

    实例一:

    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace KUN.CONTROL.LIB.CONTROL
    {
        public partial class KMenuTabControl : System.Windows.Forms.TabControl
        {
            #region 属性、构造
            Color SelectedColor = Color.LightSkyBlue;
            Color MoveColor = Color.LightSeaGreen;
            Color FontColor = Color.Black;
            int TextLeft = 10;
            [Browsable(true)]
            [Description("选项卡标题左边距"), Category("TextLeft"), DefaultValue(typeof(Int32), "10")]
            public int TitleTextLeft
            {
                get { return TextLeft; }
                set { this.TextLeft = value; }
            }
    
            [Browsable(true)]
            [Description("选项卡标题字体颜色"), Category("TitleColor"), DefaultValue(typeof(Color), "Black")]
            public Color TitleFontColor
            {
                get { return FontColor; }
                set { this.FontColor = value; }
            }
    
            [Browsable(true)]
            [Description("选项卡标题字体选中颜色"), Category("TitleColor"), DefaultValue(typeof(Color), "LightSkyBlue")]
            public Color TitleSelectedColor
            {
                get { return SelectedColor; }
                set { this.SelectedColor = value; }
            }
    
            [Browsable(true)]
            [Description("选项卡标题字体悬浮颜色"), Category("TitleColor"), DefaultValue(typeof(Color), "White")]
            public Color TitleMoveColor
            {
                get { return MoveColor; }
                set { this.MoveColor = value; }
            }
    
            [Browsable(true), Description("整个控件的背景色"), Category("外观")]
            public Color TabControlBackColor { get; set; }
    
            [Browsable(true), Description("TabControl ItemSize"), Category("外观")]
            public Size TabControlItemSize { get; set; }
    
            public KMenuTabControl()
            {
                this.SuspendLayout();
                this.DrawMode = TabDrawMode.OwnerDrawFixed;
                this.ResumeLayout(false);
                this.SizeMode = TabSizeMode.Fixed;
                this.Multiline = true;
                this.TabControlBackColor = Color.SeaShell;
                this.TabControlItemSize = new Size(100, 28);
                this.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.tabMenu_DrawItem);
                this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);
            }
            #endregion
    
            protected override void OnPaint(PaintEventArgs e)
            {
                Rectangle tcRec = this.ClientRectangle;//整个tabControl的边框
                e.Graphics.FillRectangle(new SolidBrush(this.TabControlBackColor), tcRec);
                if (this.ItemSize!=this.TabControlItemSize)
                {
                    this.ItemSize = TabControlItemSize;
                }
    
                StringFormat sf = new StringFormat();//封装文本布局信息 
                sf.LineAlignment = StringAlignment.Center;
                sf.Alignment = StringAlignment.Near;
                for (int i = 0; i < this.TabCount; i++)
                {
                    Graphics g = e.Graphics;
                    // int width = (int)g.MeasureString(this.Controls[i].Text, this.Font).Width + 40;
                    Rectangle rect = this.GetTabRect(i);
                    //  rect.Width = width;
                    if (this.SelectedIndex == i)
                        g.FillRectangle(new SolidBrush(MoveColor), rect);
                    else g.FillRectangle(new SolidBrush(SelectedColor), rect);
    
                    SolidBrush brush = new SolidBrush(FontColor);
                    //  rect.Width = width;
                    rect.X += TextLeft;
                    g.DrawString(this.Controls[i].Text, this.Font, brush, rect, sf);
                    using (Pen objpen = new Pen(Color.Black))
                    {
                        int tx = (int)(rect.X + (rect.Width - 30));
                        rect.X = tx - 2;
                        Point p5 = new Point(tx, 8);
                        Font font = new System.Drawing.Font("微软雅黑", 12);
                        g.DrawString("〇", font, brush, rect, sf);
                        font = new System.Drawing.Font("微软雅黑", 11);
                        rect.X = tx + 2;
                        rect.Y = rect.Y - 1;
                        g.DrawString("×", font, brush, rect, sf);
                    }
                }
            }
    
            public override Rectangle DisplayRectangle
            {
                get
                {
                    Rectangle rect = base.DisplayRectangle;
                    return new Rectangle(rect.Left - 2, rect.Top - 2, rect.Width + 4, rect.Height + 5);
                }
            }
    
            int index = -1;
            protected override void OnMouseMove(MouseEventArgs e)
            {
                int Count = 0;
                try
                {
                    Graphics g = this.CreateGraphics();
                    SolidBrush brush = new SolidBrush(FontColor);
                    StringFormat sf = new StringFormat();//封装文本布局信息 
                    sf.LineAlignment = StringAlignment.Center;
                    sf.Alignment = StringAlignment.Near;
    
                    for (int i = 0; i < this.TabPages.Count; i++)
                    {
                        TabPage tp = this.TabPages[i];
                        if (this.GetTabRect(i).Contains(e.Location) && tp != this.SelectedTab)
                        {
                            if (index != i)
                            {
                                if (Count == 0)
                                {
                                    if (index != -1 && this.TabPages[index] != this.SelectedTab)
                                    {
                                        g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(index));
    
                                        RectangleF tRectangle = this.GetTabRect(index);
                                        tRectangle.X += TextLeft;
                                        g.DrawString(this.Controls[index].Text, this.Font, brush, tRectangle, sf);
                                    }
                                    Count = 1;
                                }
                                index = i;
                                g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(i));
                                RectangleF tRectangleF = this.GetTabRect(i);
                                tRectangleF.X += TextLeft;
                                g.DrawString(this.Controls[i].Text, this.Font, brush, tRectangleF, sf);
                                using (Pen objpen = new Pen(Color.Black))
                                {
                                    int tx = (int)(tRectangleF.X + (tRectangleF.Width - 30));
                                    tRectangleF.X = tx - 2;
                                    brush.Color = Color.White;
                                    Font font = new System.Drawing.Font("微软雅黑", 12);
                                    g.DrawString("〇", font, brush, tRectangleF, sf);
                                    font = new System.Drawing.Font("微软雅黑", 11);
                                    tRectangleF.X = tx + 2;
                                    tRectangleF.Y = tRectangleF.Y - 1;
                                    g.DrawString("×", font, brush, tRectangleF, sf);
                                }
                            }
                        }
                        if (this.GetTabRect(i).Contains(e.Location) && tp == this.SelectedTab)
                        {
                            if (index != -1 && index != this.SelectedIndex)
                            {
                                g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(index));
                                RectangleF tRectangleF = this.GetTabRect(index);
                                tRectangleF.X += TextLeft;
                                g.DrawString(this.Controls[index].Text, this.Font, brush, tRectangleF, sf);
                                using (Pen objpen = new Pen(Color.Black))
                                {
                                    int tx = (int)(tRectangleF.X + (tRectangleF.Width - 30));
                                    tRectangleF.X = tx - 2;
                                    Font font = new System.Drawing.Font("微软雅黑", 12);
                                    g.DrawString("〇", font, brush, tRectangleF, sf);
                                    font = new System.Drawing.Font("微软雅黑", 11);
                                    tRectangleF.X = tx + 2;
                                    tRectangleF.Y = tRectangleF.Y - 1;
                                    g.DrawString("×", font, brush, tRectangleF, sf);
                                }
                            }
                            index = -1;
                        }
                    }
                }
                catch (Exception)
                {
                }
                Count = 0;
                base.OnMouseMove(e);
            }
    
            protected override void OnMouseLeave(EventArgs e)
            {
                try
                {
                    Graphics g = this.CreateGraphics();
                    if (index != -1 && this.TabPages[index] != this.SelectedTab)
                    {
                        g.FillRectangle(new SolidBrush(SelectedColor), this.GetTabRect(index));
                        SolidBrush brush = new SolidBrush(FontColor);
                        RectangleF tRectangleF = this.GetTabRect(index);
                        StringFormat sf = new StringFormat();//封装文本布局信息 
                        sf.LineAlignment = StringAlignment.Center;
                        sf.Alignment = StringAlignment.Near;
                        tRectangleF.X += TextLeft;
                        g.DrawString(this.Controls[index].Text, this.Font, brush, tRectangleF, sf);
                        using (Pen objpen = new Pen(Color.Black))
                        {
                            int tx = (int)(tRectangleF.X + (tRectangleF.Width - 30));
                            tRectangleF.X = tx - 2;
                            Point p5 = new Point(tx, 8);
                            Font font = new System.Drawing.Font("微软雅黑", 12);
                            g.DrawString("〇", font, brush, tRectangleF, sf);
                            font = new System.Drawing.Font("微软雅黑", 11);
                            tRectangleF.X = tx + 2;
                            tRectangleF.Y = tRectangleF.Y - 1;
                            g.DrawString("×", font, brush, tRectangleF, sf);
                        }
                    }
                }
                catch (Exception)
                {
                }
                index = -1;
                base.OnMouseLeave(e);
            }
            /// <summary>
            /// 重绘控件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void tabMenu_DrawItem(object sender, DrawItemEventArgs e)
            {
                this.SetStyle(
                ControlStyles.UserPaint |                      // 控件将自行绘制,而不是通过操作系统来绘制  
                ControlStyles.OptimizedDoubleBuffer |          // 该控件首先在缓冲区中绘制,而不是直接绘制到屏幕上,这样可以减少闪烁  
                ControlStyles.AllPaintingInWmPaint |           // 控件将忽略 WM_ERASEBKGND 窗口消息以减少闪烁  
                ControlStyles.ResizeRedraw |                   // 在调整控件大小时重绘控件  
                ControlStyles.SupportsTransparentBackColor,    // 控件接受 alpha 组件小于 255 的 BackColor 以模拟透明  
                true);                                         // 设置以上值为 true  
                this.UpdateStyles();
            }
    
            //关闭按钮功能
            private void MainTabControl_MouseDown(object sender, MouseEventArgs e)
            {
                int closeSize = 20;
                if (e.Button == MouseButtons.Left)
                {
                    int x = e.X, y = e.Y;
                    //计算关闭区域   
                    Rectangle tab = this.GetTabRect(this.SelectedIndex);
                    tab.Offset(tab.Width - (closeSize + 3), 4);
                    tab.Width = closeSize;
                    tab.Height = closeSize;
    
                    if (this.TabCount == 1) return;
    
                    //如果鼠标在区域内就关闭选项卡   
                    bool isClose = x > tab.X && x < tab.Right && y > tab.Y && y < tab.Bottom;
                    if (isClose == true)
                    {
                        this.TabPages.Remove(this.SelectedTab);
                    }
                }
            }
    
        }
    }
    

    实例二:

    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace KUN.CONTROL.LIB.CONTROL
    {
        public partial class KTabControl : System.Windows.Forms.TabControl
        {
            [Browsable(true), Description("整个控件的背景色"), Category("外观")]
            public Color TabControlBackColor { get; set; }
    
            [Browsable(true), Description("Tab的标题栏边框颜色"), Category("外观")]
            public Color TabBorderColor { get; set; }
    
            [Browsable(true), Description("当前激活Tab的标题栏背景色"), Category("外观")]
            public Color ActivedTabBackColor { get; set; }
    
            [Browsable(true), Description("当前激活Tab的标题文字颜色"), Category("外观")]
            public Color ActivedTabLabelColor { get; set; }
    
            [Browsable(true), Description("未激活Tab的标题栏背景色"), Category("外观")]
            public Color InActivedTabBackColor { get; set; }
    
            [Browsable(true), Description("未激活Tab的标题文字颜色"), Category("外观")]
            public Color InActivedTabLabelColor { get; set; }
    
            [Browsable(true), Description("Tab标题栏的大小"), Category("外观")]
            public Size TabSize { get; set; }
    
            public KTabControl()
            {
                this.InitializeComponent();
    
                TabSet();
    
                this.TabBorderColor = Color.Black;
                this.ActivedTabLabelColor = Color.Black;
                this.InActivedTabLabelColor = Color.Black;
                this.ActivedTabBackColor = Color.White;
                this.InActivedTabBackColor = Color.FromArgb(0, 192, 192);
                this.TabControlBackColor = Color.Transparent;
                this.TabSize = new Size(100, 35);
            }
    
            protected override void OnMouseDoubleClick(MouseEventArgs e)
            {
                if (this.TabPages.Count == 1) return;
                this.TabPages.RemoveAt(this.SelectedIndex);
            }
    
            protected override void OnPaint(PaintEventArgs e)
            {
                Rectangle tcRec = this.ClientRectangle;//整个tabControl的边框
                e.Graphics.FillRectangle(new SolidBrush(this.TabControlBackColor), tcRec);
    
                for (int i = 0; i < this.TabPages.Count; i++)
                {
                    Rectangle tabRectangle = new Rectangle(1, 1 + i * TabSize.Height, TabSize.Width, TabSize.Height);
                    SolidBrush brush = new SolidBrush(this.InActivedTabLabelColor);
                    StringFormat sf = new StringFormat();//封装文本布局信息
                    sf.LineAlignment = StringAlignment.Center;
                    sf.Alignment = StringAlignment.Center;
                    if (i == this.SelectedIndex)
                    {
                        brush = new SolidBrush(this.ActivedTabLabelColor);
                        e.Graphics.FillRectangle(new SolidBrush(ActivedTabBackColor), tabRectangle);
                        e.Graphics.DrawRectangle(new Pen(this.TabBorderColor), tabRectangle);
                    }
                    else
                    {
                        e.Graphics.FillRectangle(new SolidBrush(InActivedTabBackColor), tabRectangle);
                        e.Graphics.DrawRectangle(new Pen(this.TabBorderColor), tabRectangle);
                    }
                    e.Graphics.DrawString(this.Controls[i].Text, this.Font, brush, tabRectangle, sf);
                }
            }
    
            /// <summary>
            /// 设定控件绘制模式
            /// </summary>
            private void TabSet()
            {
                this.DrawMode = TabDrawMode.OwnerDrawFixed;
                this.Alignment = TabAlignment.Left;
                this.SizeMode = TabSizeMode.Fixed;
                this.Multiline = true;
                base.SetStyle(
                    ControlStyles.UserPaint |                      
                    ControlStyles.OptimizedDoubleBuffer |           
                    ControlStyles.AllPaintingInWmPaint |             
                    ControlStyles.ResizeRedraw |                     
                    ControlStyles.SupportsTransparentBackColor,      
                    true);                                         
                base.UpdateStyles();
            }
    
            public override Rectangle DisplayRectangle
            {
                get
                {
                    Rectangle rect = base.DisplayRectangle;
                    return new Rectangle(rect.Left - 3, rect.Top - 3, rect.Width + 6, rect.Height + 5);
                }
            }
        }
    }
    

      

  • 相关阅读:
    asp.net+ tinymce粘贴word
    jsp+ tinymce粘贴word
    jsp+ ueditor word粘贴上传
    php+ ueditor word粘贴上传
    asp.net+ueditor word粘贴上传
    word写博客
    【转】如何使用离线博客发布工具发布CSDN的博客文章
    用word发布CSDN文章
    用word发CSDN blog,免去插图片的烦恼
    如何实现word上传服务器
  • 原文地址:https://www.cnblogs.com/YYkun/p/11491811.html
Copyright © 2011-2022 走看看