官網
http://www.hzhcontrols.com
前提
入行已經7,8年了,一直想做一套漂亮點的自定義控制元件,于是就有了本系列文章,
GitHub:https://github.com/kwwwvagaa/NetWinformControl
碼云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
如果覺得寫的還行,請點個 star 支持一下吧
歡迎前來交流探討: 企鵝群568015492 
來都來了,點個【推薦】再走吧,謝謝
NuGet
Install-Package HZH_Controls
目錄
https://www.cnblogs.com/bfyx/p/11364884.html
用處及效果

準備作業
這個比較簡單,對label擴展,重繪劃線即可
開始
添加一個類UCSplitLabel ,繼承 Label
代碼比較少
1 // *********************************************************************** 2 // Assembly : HZH_Controls 3 // Created : 2019-10-09 4 // 5 // *********************************************************************** 6 // <copyright file="UCSplitLabel.cs"> 7 // Copyright by Huang Zhenghui(黃正輝) All, QQ group:568015492 QQ:623128629 Email:[email protected] 8 // </copyright> 9 // 10 // Blog: https://www.cnblogs.com/bfyx 11 // GitHub:https://github.com/kwwwvagaa/NetWinformControl 12 // gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git 13 // 14 // If you use this code, please keep this note. 15 // *********************************************************************** 16 using System; 17 using System.Collections.Generic; 18 using System.Linq; 19 using System.Text; 20 using System.Windows.Forms; 21 using System.Drawing; 22 using System.ComponentModel; 23 24 namespace HZH_Controls.Controls 25 { 26 /// <summary> 27 /// Class UCSplitLabel. 28 /// Implements the <see cref="System.Windows.Forms.Label" /> 29 /// </summary> 30 /// <seealso cref="System.Windows.Forms.Label" /> 31 public class UCSplitLabel : Label 32 { 33 /// <summary> 34 /// Gets or sets the text. 35 /// </summary> 36 /// <value>The text.</value> 37 [Localizable(true)] 38 public override string Text 39 { 40 get 41 { 42 return base.Text; 43 } 44 set 45 { 46 base.Text = value; 47 ResetMaxSize(); 48 } 49 } 50 /// <summary> 51 /// 獲取或設定控制元件顯示的文字的字體, 52 /// </summary> 53 /// <value>The font.</value> 54 /// <PermissionSet> 55 /// <IPermission version="1" Unrestricted="true" /> 56 /// <IPermission version="1" Unrestricted="true" /> 57 /// <IPermission version="1" Flags="UnmanagedCode, ControlEvidence" /> 58 /// <IPermission version="1" Unrestricted="true" /> 59 /// </PermissionSet> 60 [Localizable(true)] 61 public override Font Font 62 { 63 get 64 { 65 return base.Font; 66 } 67 set 68 { 69 base.Font = value; 70 ResetMaxSize(); 71 } 72 } 73 /// <summary> 74 /// 獲取或設定大小,該大小是 <see cref="M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)" /> 可以指定的下限, 75 /// </summary> 76 /// <value>The minimum size.</value> 77 [Localizable(true)] 78 public override Size MinimumSize 79 { 80 get 81 { 82 return base.MinimumSize; 83 } 84 set 85 { 86 base.MinimumSize = value; 87 ResetMaxSize(); 88 } 89 } 90 91 92 /// <summary> 93 /// 獲取或設定大小,該大小是 <see cref="M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)" /> 可以指定的上限, 94 /// </summary> 95 /// <value>The maximum size.</value> 96 [Localizable(true)] 97 public override Size MaximumSize 98 { 99 get100 {101 return base.MaximumSize;102 }103 set104 {105 base.MaximumSize = value;106 ResetMaxSize();107 }108 }109 /// <summary>110 /// 獲取或設定一個值,該值指示是否自動調整控制元件的大小以完整顯示其內容,111 /// </summary>112 /// <value><c>true</c> if [automatic size]; otherwise, <c>false</c>.</value>113 /// <PermissionSet>114 /// <IPermission version="1" Unrestricted="true" />115 /// <IPermission version="1" Unrestricted="true" />116 /// <IPermission version="1" Flags="UnmanagedCode, ControlEvidence" />117 /// <IPermission version="1" Unrestricted="true" />118 /// </PermissionSet>119 [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]120 public override bool AutoSize121 {122 get123 {124 return base.AutoSize;125 }126 set127 {128 base.AutoSize = value;129 }130 }131 132 133 /// <summary>134 /// The line color135 /// </summary>136 private Color lineColor = LineColors.Light;137 138 /// <summary>139 /// Gets or sets the color of the line.140 /// </summary>141 /// <value>The color of the line.</value>142 public Color LineColor143 {144 get { return lineColor; }145 set146 {147 lineColor = value;148 Invalidate();149 }150 }151 152 /// <summary>153 /// Resets the maximum size.154 /// </summary>155 private void ResetMaxSize()156 {157 using (var g = this.CreateGraphics())158 {159 var _width = Width;160 var size = g.MeasureString(string.IsNullOrEmpty(Text) ? "A" : Text, Font);161 if (MinimumSize.Height != (int)size.Height)162 MinimumSize = new Size(base.MinimumSize.Width, (int)size.Height);163 if (MaximumSize.Height != (int)size.Height)164 MaximumSize = new Size(base.MaximumSize.Width, (int)size.Height);165 this.Width = _width;166 }167 }168 /// <summary>169 /// Initializes a new instance of the <see cref="UCSplitLabel"/> class.170 /// </summary>171 public UCSplitLabel()172 : base()173 {174 if (ControlHelper.IsDesignMode())175 {176 Text = "分割線";177 Font = new Font("微軟雅黑", 8f);178 }179 this.AutoSize = false;180 Padding = new Padding(20, 0, 0, 0);181 MinimumSize = new System.Drawing.Size(150, 10);182 PaddingChanged += UCSplitLabel_PaddingChanged;183 this.Width = 200;184 }185 186 /// <summary>187 /// Handles the PaddingChanged event of the UCSplitLabel control.188 /// </summary>189 /// <param name="sender">The source of the event.</param>190 /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>191 void UCSplitLabel_PaddingChanged(object sender, EventArgs e)192 {193 if (Padding.Left < 20)194 {195 Padding = new Padding(20, Padding.Top, Padding.Right, Padding.Bottom);196 }197 }198 199 /// <summary>200 /// Handles the <see cref="E:Paint" /> event.201 /// </summary>202 /// <param name="e">包含事件資料的 <see cref="T:System.Windows.Forms.PaintEventArgs" />,</param>203 protected override void OnPaint(PaintEventArgs e)204 {205 base.OnPaint(e);206 var g = e.Graphics;207 g.SetGDIHigh();208 209 var size = g.MeasureString(Text, Font);210 g.DrawLine(new Pen(new SolidBrush(lineColor)), new PointF(1, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2), new PointF(Padding.Left - 2, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2));211 g.DrawLine(new Pen(new SolidBrush(lineColor)), new PointF(Padding.Left + size.Width + 1, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2), new PointF(Width - Padding.Right, Padding.Top + (this.Height - Padding.Top - Padding.Bottom) / 2));212 213 }214 }215 }
最后的話
如果你喜歡的話,請到 https://gitee.com/kwwwvagaa/net_winform_custom_control 點個星星吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/4905.html
標籤:WinForm
