C# WinForm 自定义控件,DataGridView背景透明,TabControl背景透明

 注意: 以下代码,属性直接赋值的语法糖要vs2015以上才支持。
 
  1 using System.ComponentModel;
  2 using System.Drawing;
  3 using System.Windows.Forms;
  4 namespace RaywindStudio.Components
  5 {
  6     public class TabCtrlX : TabControl
  7     {
  8         public TabCtrlX()
  9         {
 10             InitializeComponent();
 11             this.SetStyle(ControlStyles.UserPaint, true);//用户自己绘制
 12             this.SetStyle(ControlStyles.ResizeRedraw, true);
 13             this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 14             this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
 15             //让控件支持透明色
 16             this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
 17         }
 18 
 19         #region designer
 20         /// <summary>
 21         /// 必需的设计器变量。
 22         /// </summary>
 23         private System.ComponentModel.IContainer components = null;
 24 
 25         /// <summary> 
 26         /// 清理所有正在使用的资源。
 27         /// </summary>
 28         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
 29         protected override void Dispose(bool disposing)
 30         {
 31             if (disposing && (components != null))
 32             {
 33                 components.Dispose();
 34             }
 35             base.Dispose(disposing);
 36         }
 37 
 38         #region 组件设计器生成的代码
 39 
 40         /// <summary>
 41         /// 设计器支持所需的方法 - 不要
 42         /// 使用代码编辑器修改此方法的内容。
 43         /// </summary>
 44         private void InitializeComponent()
 45         {
 46             components = new System.ComponentModel.Container();
 47         }
 48 
 49         #endregion
 50         #endregion
 51         //[EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 52         public override Color BackColor {
 53             get {
 54                 return Color.FromArgb(Alpha, BgColor);
 55             }
 56             set {
 57                 Alpha = BackColor.A;
 58                 BgColor = BackColor;
 59             }
 60         }
 61 
 62         [DisplayName("Color.Alpha")]
 63         [CategoryAttribute("Color"), DescriptionAttribute("Opacity不透明度0--255")]
 64         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 65         public byte Alpha { get; set; } = 16;
 66 
 67         [DisplayName("Color.BgColor")]
 68         [CategoryAttribute("Color"), DescriptionAttribute("TabControl工作区背景色")]
 69         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 70         public Color BgColor { get; set; } = Color.White;
 71 
 72         [DisplayName("Color.BordColor")]
 73         [CategoryAttribute("Color"), DescriptionAttribute("TabControl边线颜色")]
 74         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 75         public Color BordColor { get; set; } = Color.LightGray;
 76 
 77         [DisplayName("Color.TitleColor")]
 78         [CategoryAttribute("Color"), DescriptionAttribute("TabPage标头背景色")]
 79         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 80         public Color TitleColor { get; set; } = Color.WhiteSmoke;
 81 
 82         [DisplayName("Color.TitleSeleColor")]
 83         [CategoryAttribute("Color"), DescriptionAttribute("TabPage标头选中背景色")]
 84         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 85         public Color TitleSeleColor { get; set; } = Color.White;
 86 
 87         [DisplayName("Color.TextColor")]
 88         [CategoryAttribute("Color"), DescriptionAttribute("TabPage标题颜色")]
 89         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 90         public Color TextColor { get; set; } = Color.Gray;
 91 
 92         [DisplayName("Color.TextSeleColor")]
 93         [CategoryAttribute("Color"), DescriptionAttribute("TabPage选中标题颜色")]
 94         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
 95         public Color TextSeleColor { get; set; } = Color.Black;
 96 
 97         protected override void OnPaint(PaintEventArgs e)
 98         {
 99             this.DrawTitle(e.Graphics);
100             base.OnPaint(e);
101             DrawBorder(e.Graphics);
102         }
103 
104         protected void DrawBorder(Graphics g)
105         {
106             g.DrawRectangle(new Pen(BordColor, 1F), ClientRectangle);
107         }
108 
109         protected void DrawTitle(Graphics g)
110         {
111             StringFormat sf = new StringFormat();
112             sf.Alignment = StringAlignment.Center;
113             sf.LineAlignment = StringAlignment.Center;
114             using (SolidBrush sb = new SolidBrush(SystemColors.Control))
115             {
116                 for (int i = 0; i < this.TabPages.Count; i++)
117                 {
118                     Rectangle rect = this.GetTabRect(i);
119                     if (this.SelectedIndex == i)
120                     {
121                         sb.Color = TitleSeleColor;
122                         g.FillRectangle(sb, rect);
123                         g.DrawString(this.TabPages[i].Text, this.Font, new SolidBrush(TextSeleColor), rect, sf);
124                     }
125                     else
126                     {
127                         sb.Color = TitleColor;
128                         g.FillRectangle(sb, rect);
129                         g.DrawString(this.TabPages[i].Text, this.Font, new SolidBrush(TextColor), rect, sf);
130                     }
131                 }
132             }
133         }
134     }
135 }
TabCtrlX

相关文章:

  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2021-08-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-24
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2021-06-06
相关资源
相似解决方案