<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      前提

      入行已經(jīng)7,8年了,一直想做一套漂亮點(diǎn)的自定義控件,于是就有了本系列文章。

      GitHub:https://github.com/kwwwvagaa/NetWinformControl
      <https://github.com/kwwwvagaa/NetWinformControl>

      碼云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
      <https://gitee.com/kwwwvagaa/net_winform_custom_control.git>

      如果覺得寫的還行,請(qǐng)點(diǎn)個(gè) star 支持一下吧

      歡迎前來交流探討: 企鵝群568015492?
      <https://shang.qq.com/wpa/qunwpa?idkey=6e08741ef16fe53bf0314c1c9e336c4f626047943a8b76bac062361bab6b4f8d>

      NuGet
      Install-Package HZH_Controls
      目錄

      https://www.cnblogs.com/bfyx/p/11364884.html
      <https://www.cnblogs.com/bfyx/p/11364884.html>

      用處及效果



      準(zhǔn)備工作

      這個(gè)是基于(四十一)c#Winform自定義控件-進(jìn)度條 <https://www.cnblogs.com/bfyx/p/11382124.html>
      ?擴(kuò)展的,如果你還沒有了解,請(qǐng)先移步了解一下

      開始

      添加一個(gè)用戶控件,命名UCProcessLineExt

      屬性
      1 [Description("值變更事件"), Category("自定義")] 2 public event EventHandler
      ValueChanged; 3 4 [Description("當(dāng)前屬性"), Category("自定義")] 5 public int Value 6
      { 7 set 8 { 9 ucProcessLine1.Value = value; 10 Refresh(); 11 } 12 get 13
      {14 return ucProcessLine1.Value; 15 } 16 } 17 18 19 20 [Description("最大值"),
      Category("自定義")] 21 public int MaxValue 22 { 23 get { return
      ucProcessLine1.MaxValue; }24 set 25 { 26 ucProcessLine1.MaxValue = value; 27
      Refresh();28 } 29 } 30 31 32 [Description("值進(jìn)度條顏色"), Category("自定義")] 33
      public Color ValueColor 34 { 35 get { return ucProcessLine1.ValueColor; } 36
      set 37 { 38 ucProcessLine1.ValueColor = value; 39 Refresh(); 40 } 41 } 42 43
      44 [Description("值背景色"), Category("自定義")] 45 public Color ValueBGColor 46 { 47
      get { return ucProcessLine1.ValueBGColor; } 48 set 49 { 50
      ucProcessLine1.ValueBGColor = value; 51 Refresh(); 52 } 53 } 54 55 56
      [Description("邊框顏色"), Category("自定義")] 57 public Color BorderColor 58 { 59 get
      {return ucProcessLine1.BorderColor; } 60 set 61 { 62
      ucProcessLine1.BorderColor = value; 63 Refresh(); 64 } 65 } 66 67
      [Description("值字體"), Category("自定義")] 68 public override Font Font 69 { 70 get
      71 { 72 return ucProcessLine1.Font; 73 } 74 set 75 { 76 ucProcessLine1.Font =
      value;77 Refresh(); 78 } 79 } 80 81 [Description("值塊顏色"), Category("自定義")]
      82 public override System.Drawing.Color ForeColor 83 { 84 get 85 { 86 return
      base.ForeColor; 87 } 88 set 89 { 90 base.ForeColor = value; 91 Refresh(); 92
      }93 }
      重繪
      1 protected override void OnPaint(PaintEventArgs e) 2 { 3 base.OnPaint(e);
      4 e.Graphics.SetGDIHigh(); 5 float fltIndex = (float)this
      .ucProcessLine1.Value / (float)this.ucProcessLine1.MaxValue; 6 7 int x = (int
      )(fltIndex *this.ucProcessLine1.Width + this.ucProcessLine1.Location.X - 15) - 2
      ; 8 GraphicsPath path = new GraphicsPath(); 9 Rectangle rect = new Rectangle(x,
      1, 30, 20); 10 int cornerRadius = 2; 11 path.AddArc(rect.X, rect.Y,
      cornerRadius *2, cornerRadius * 2, 180, 90); 12 path.AddLine(rect.X +
      cornerRadius, rect.Y, rect.Right - cornerRadius *2, rect.Y); 13
      path.AddArc(rect.X + rect.Width - cornerRadius *2, rect.Y, cornerRadius * 2,
      cornerRadius *2, 270, 90); 14 path.AddLine(rect.Right, rect.Y + cornerRadius * 2
      , rect.Right, rect.Y + rect.Height - cornerRadius *2); 15 path.AddArc(rect.X +
      rect.Width - cornerRadius *2, rect.Y + rect.Height - cornerRadius * 2,
      cornerRadius *2, cornerRadius * 2, 0, 90); 16 path.AddLine(rect.Right -
      cornerRadius *2, rect.Bottom, rect.Right - cornerRadius * 2 - 5, rect.Bottom);//
      下 17 path.AddLine(rect.Right - cornerRadius * 2 - 5, 21, x + 15,
      ucProcessLine1.Location.Y);18 path.AddLine(x + 15, ucProcessLine1.Location.Y,
      rect.X + cornerRadius *2 + 5, 21); 19 path.AddLine(rect.X + cornerRadius * 2 + 5
      ,20, rect.X + cornerRadius * 2, rect.Bottom);//下 20 path.AddArc(rect.X,
      rect.Bottom - cornerRadius *2, cornerRadius * 2, cornerRadius * 2, 90, 90); 21
      path.AddLine(rect.X, rect.Bottom - cornerRadius *2, rect.X, rect.Y +
      cornerRadius *2);//上 22 path.CloseFigure(); 23 24 e.Graphics.FillPath(new
      SolidBrush(ForeColor), path);25 26 string strValue = ((float)Value / (float
      )MaxValue).ToString("0%"); 27 System.Drawing.SizeF sizeF =
      e.Graphics.MeasureString(strValue, Font);28 e.Graphics.DrawString(strValue,
      Font,new SolidBrush(Color.White), new PointF(x + (30 - sizeF.Width) / 2+1, (20
      - sizeF.Height) /2 + 1)); 29 }
      全部代碼
      1 using System; 2 using System.Collections.Generic; 3 using
      System.ComponentModel; 4 using System.Drawing; 5 using System.Data; 6 using
      System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using
      System.Drawing.Drawing2D; 10 11 namespace HZH_Controls.Controls 12 { 13
      public partial class UCProcessLineExt : UserControl 14 { 15 [Description("
      值變更事件"), Category("自定義")] 16 public event EventHandler ValueChanged; 17 18
      [Description("當(dāng)前屬性"), Category("自定義")] 19 public int Value 20 { 21 set 22
      { 23 ucProcessLine1.Value = value; 24 Refresh(); 25 } 26 get 27 { 28
      return ucProcessLine1.Value; 29 } 30 } 31 32 33 34 [Description("最大值"),
      Category("自定義")] 35 public int MaxValue 36 { 37 get { return
      ucProcessLine1.MaxValue; } 38 set 39 { 40 ucProcessLine1.MaxValue = value;
      41 Refresh(); 42 } 43 } 44 45 46 [Description("值進(jìn)度條顏色"), Category("自定義"
      )] 47 public Color ValueColor 48 { 49 get { return
      ucProcessLine1.ValueColor; } 50 set 51 { 52 ucProcessLine1.ValueColor =
      value; 53 Refresh(); 54 } 55 } 56 57 58 [Description("值背景色"), Category("
      自定義")] 59 public Color ValueBGColor 60 { 61 get { return
      ucProcessLine1.ValueBGColor; } 62 set 63 { 64 ucProcessLine1.ValueBGColor =
      value; 65 Refresh(); 66 } 67 } 68 69 70 [Description("邊框顏色"), Category("
      自定義")] 71 public Color BorderColor 72 { 73 get { return
      ucProcessLine1.BorderColor; } 74 set 75 { 76 ucProcessLine1.BorderColor =
      value; 77 Refresh(); 78 } 79 } 80 81 [Description("值字體"), Category("自定義"
      )] 82 public override Font Font 83 { 84 get 85 { 86 return
      ucProcessLine1.Font; 87 } 88 set 89 { 90 ucProcessLine1.Font = value; 91
      Refresh(); 92 } 93 } 94 95 [Description("值塊顏色"), Category("自定義")] 96
      public override System.Drawing.Color ForeColor 97 { 98 get 99 { 100 return
      base.ForeColor; 101 } 102 set 103 { 104 base.ForeColor = value; 105
      Refresh();106 } 107 } 108 109 public UCProcessLineExt() 110 { 111
      InitializeComponent();112 this.SetStyle(ControlStyles.AllPaintingInWmPaint, true
      );113 this.SetStyle(ControlStyles.DoubleBuffer, true); 114 this
      .SetStyle(ControlStyles.ResizeRedraw,true); 115 this
      .SetStyle(ControlStyles.Selectable,true); 116 this
      .SetStyle(ControlStyles.SupportsTransparentBackColor,true); 117 this
      .SetStyle(ControlStyles.UserPaint,true); 118 ucProcessLine1.ValueChanged +=
      ucProcessLine1_ValueChanged;119 } 120 121 void ucProcessLine1_ValueChanged(
      object sender, EventArgs e) 122 { 123 if (ValueChanged != null) 124 { 125
      ValueChanged(this, e); 126 } 127 } 128 129 protected override void
      OnPaint(PaintEventArgs e)130 { 131 base.OnPaint(e); 132
      e.Graphics.SetGDIHigh();133 float fltIndex = (float)this.ucProcessLine1.Value /
      (float)this.ucProcessLine1.MaxValue; 134 135 int x = (int)(fltIndex * this
      .ucProcessLine1.Width +this.ucProcessLine1.Location.X - 15) - 2; 136
      GraphicsPath path =new GraphicsPath(); 137 Rectangle rect = new Rectangle(x, 1,
      30, 20); 138 int cornerRadius = 2; 139 path.AddArc(rect.X, rect.Y, cornerRadius
      *2, cornerRadius * 2, 180, 90); 140 path.AddLine(rect.X + cornerRadius, rect.Y,
      rect.Right - cornerRadius *2, rect.Y); 141 path.AddArc(rect.X + rect.Width -
      cornerRadius *2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90); 142
      path.AddLine(rect.Right, rect.Y + cornerRadius *2, rect.Right, rect.Y +
      rect.Height - cornerRadius *2); 143 path.AddArc(rect.X + rect.Width -
      cornerRadius *2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2,
      cornerRadius *2, 0, 90); 144 path.AddLine(rect.Right - cornerRadius * 2,
      rect.Bottom, rect.Right - cornerRadius *2 - 5, rect.Bottom);//下 145
      path.AddLine(rect.Right - cornerRadius *2 - 5, 21, x + 15,
      ucProcessLine1.Location.Y);146 path.AddLine(x + 15, ucProcessLine1.Location.Y,
      rect.X + cornerRadius *2 + 5, 21); 147 path.AddLine(rect.X + cornerRadius * 2 +
      5, 20, rect.X + cornerRadius * 2, rect.Bottom);//下 148 path.AddArc(rect.X,
      rect.Bottom - cornerRadius *2, cornerRadius * 2, cornerRadius * 2, 90, 90); 149
      path.AddLine(rect.X, rect.Bottom - cornerRadius *2, rect.X, rect.Y +
      cornerRadius *2);//上 150 path.CloseFigure(); 151 152 e.Graphics.FillPath(new
      SolidBrush(ForeColor), path);153 154 string strValue = ((float)Value / (float
      )MaxValue).ToString("0%"); 155 System.Drawing.SizeF sizeF =
      e.Graphics.MeasureString(strValue, Font);156 e.Graphics.DrawString(strValue,
      Font,new SolidBrush(Color.White), new PointF(x + (30 - sizeF.Width) / 2+1, (20
      - sizeF.Height) /2 + 1)); 157 } 158 } 159 } View Code 1 namespace
      HZH_Controls.Controls 2 { 3 partial class UCProcessLineExt 4 { 5 ///
      <summary> 6 /// 必需的設(shè)計(jì)器變量。 7 /// </summary> 8 private
      System.ComponentModel.IContainer components =null; 9 10 /// <summary> 11 ///
      清理所有正在使用的資源。12 /// </summary> 13 /// <param name="disposing">如果應(yīng)釋放托管資源,為
      true;否則為 false。</param> 14 protected override void Dispose(bool disposing) 15 {
      16 if (disposing && (components != null)) 17 { 18 components.Dispose(); 19 }
      20 base.Dispose(disposing); 21 } 22 23 #region 組件設(shè)計(jì)器生成的代碼 24 25 /// <summary>
      26 /// 設(shè)計(jì)器支持所需的方法 - 不要 27 /// 使用代碼編輯器修改此方法的內(nèi)容。 28 /// </summary> 29 private void
      InitializeComponent()30 { 31 this.ucProcessLine1 = new
      HZH_Controls.Controls.UCProcessLine();32 this.SuspendLayout(); 33 // 34 //
      ucProcessLine135 // 36 this.ucProcessLine1.Anchor =
      ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
      System.Windows.Forms.AnchorStyles.Bottom)37 |
      System.Windows.Forms.AnchorStyles.Left)38 |
      System.Windows.Forms.AnchorStyles.Right)));39 this.ucProcessLine1.BorderColor =
      System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((
      int)(((byte)(192))))); 40 this.ucProcessLine1.Font = new System.Drawing.Font("
      Arial Unicode MS", 10F); 41 this.ucProcessLine1.ForeColor =
      System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(77)))), ((
      int)(((byte)(59))))); 42 this.ucProcessLine1.Location = new
      System.Drawing.Point(18, 33); 43 this.ucProcessLine1.MaxValue = 100; 44 this
      .ucProcessLine1.Name ="ucProcessLine1"; 45 this.ucProcessLine1.Size = new
      System.Drawing.Size(399, 16); 46 this.ucProcessLine1.TabIndex = 0; 47 this
      .ucProcessLine1.Text ="ucProcessLine1"; 48 this.ucProcessLine1.Value = 0; 49
      this.ucProcessLine1.ValueBGColor = System.Drawing.Color.White; 50 this
      .ucProcessLine1.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(73
      )))), ((int)(((byte)(119)))), ((int)(((byte)(232))))); 51 this
      .ucProcessLine1.ValueTextType = HZH_Controls.Controls.ValueTextType.None; 52 //
      53 // UCProcessLineExt 54 // 55 this.AutoScaleMode =
      System.Windows.Forms.AutoScaleMode.None;56 this.BackColor =
      System.Drawing.Color.Transparent;57 this.Controls.Add(this.ucProcessLine1); 58
      this.Name = "UCProcessLineExt"; 59 this.Size = new System.Drawing.Size(434, 50);
      60 this.ResumeLayout(false); 61 62 } 63 64 #endregion 65 66 private
      UCProcessLine ucProcessLine1;67 } 68 } View Code
      最后的話

      如果你喜歡的話,請(qǐng)到?https://gitee.com/kwwwvagaa/net_winform_custom_control
      <https://gitee.com/kwwwvagaa/net_winform_custom_control>?點(diǎn)個(gè)星星吧

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          爱搞搞就要搞 | 欧美激情亚洲色图 | 狂野欧美性猛交XXⅩ大乱3超A | 精品国产露脸对白在线观看 | 乳色吐息下卷 | 99在线欢看视频 | 天天日天天看 | 麻豆国产精品 | 99久久久国产精品 | 黑人粗大|