<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>

      麻煩博客下方點(diǎn)個(gè)【推薦】,謝謝

      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自定義控件-有圖標(biāo)的按鈕 <https://www.cnblogs.com/bfyx/p/11361974.html>
      ,如不了解,請(qǐng)移步查看

      開始

      添加一個(gè)用戶控件UCDropDownBtn,繼承自UCBtnImg

      處理一些屬性
      1 Forms.FrmAnchor _frmAnchor; 2 private int _dropPanelHeight = -1; 3 public
      new event EventHandler BtnClick; 4 [Description("下拉框高度"), Category("自定義")] 5
      public int DropPanelHeight 6 { 7 get { return _dropPanelHeight; } 8 set {
      _dropPanelHeight = value; } 9 } 10 private string[] btns ; 11 [Description("按鈕
      "), Category("自定義")] 12 public string[] Btns 13 { 14 get { return btns; } 15
      set { btns = value; } 16 } 17 [Obsolete("不再可用的屬性")] 18 [Browsable(false),
      EditorBrowsable(EditorBrowsableState.Never)]19 public override Image Image 20 {
      21 get; 22 set; 23 } 24 [Obsolete("不再可用的屬性")] 25 [Browsable(false),
      EditorBrowsable(EditorBrowsableState.Never)]26 public override ContentAlignment
      ImageAlign27 { 28 get; 29 set; 30 }
      點(diǎn)擊時(shí)候顯示下拉框
      1 void UCDropDownBtn_BtnClick(object sender, EventArgs e) 2 { 3 if
      (_frmAnchor ==null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false) 4
      { 5 6 if (Btns != null && Btns.Length > 0) 7 { 8 int intRow = 0; 9 int
      intCom =1; 10 var p = this.PointToScreen(this.Location); 11 while (true) 12 {
      13 int intScreenHeight = Screen.PrimaryScreen.Bounds.Height; 14 if ((p.Y + this
      .Height + Btns.Length / intCom *50 < intScreenHeight || p.Y - Btns.Length /
      intCom *50 > 0) 15 && (_dropPanelHeight <= 0 ? true : (Btns.Length / intCom * 50
      <= _dropPanelHeight))) 16 { 17 intRow = Btns.Length / intCom + (Btns.Length %
      intCom !=0 ? 1 : 0); 18 break; 19 } 20 intCom++; 21 } 22 UCTimePanel ucTime =
      new UCTimePanel(); 23 ucTime.IsShowBorder = true; 24 int intWidth = this.Width /
      intCom;25 26 Size size = new Size(intCom * intWidth, intRow * 50); 27
      ucTime.Size = size; 28 ucTime.FirstEvent = true; 29 ucTime.SelectSourceEvent +=
      ucTime_SelectSourceEvent;30 ucTime.Row = intRow; 31 ucTime.Column = intCom; 32
      33 List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string
      >>(); 34 foreach (var item in Btns) 35 { 36 lst.Add(new KeyValuePair<string,
      string>(item, item)); 37 } 38 ucTime.Source = lst; 39 40 _frmAnchor = new
      Forms.FrmAnchor(this, ucTime); 41 _frmAnchor.Load += (a, b) => { (a as
      Form).Size = size; }; 42 43 _frmAnchor.Show(this.FindForm()); 44 45 } 46 } 47
      else 48 { 49 _frmAnchor.Close(); 50 } 51 }
      處理一下按鈕事件
      1 void ucTime_SelectSourceEvent(object sender, EventArgs e) 2 { 3 if
      (_frmAnchor !=null && !_frmAnchor.IsDisposed && _frmAnchor.Visible) 4 { 5
      _frmAnchor.Close(); 6 7 if (BtnClick != null) 8 { 9
      BtnClick(sender.ToString(), e);10 } 11 } 12 }
      完整代碼
      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 10
      namespace HZH_Controls.Controls.Btn 11 { 12 [DefaultEvent("BtnClick")] 13
      public partial class UCDropDownBtn : UCBtnImg 14 { 15 Forms.FrmAnchor
      _frmAnchor; 16 private int _dropPanelHeight = -1; 17 public new event
      EventHandler BtnClick; 18 [Description("下拉框高度"), Category("自定義")] 19 public int
      DropPanelHeight 20 { 21 get { return _dropPanelHeight; } 22 set {
      _dropPanelHeight = value; } 23 } 24 private string[] btns ; 25 [Description(
      "按鈕"), Category("自定義")] 26 public string[] Btns 27 { 28 get { return btns; }
      29 set { btns = value; } 30 } 31 [Obsolete("不再可用的屬性")] 32 [Browsable(false
      ), EditorBrowsable(EditorBrowsableState.Never)] 33 public override Image Image
      34 { 35 get; 36 set; 37 } 38 [Obsolete("不再可用的屬性")] 39 [Browsable(false),
      EditorBrowsable(EditorBrowsableState.Never)] 40 public override
      ContentAlignment ImageAlign 41 { 42 get; 43 set; 44 } 45 46 public
      UCDropDownBtn() 47 { 48 InitializeComponent(); 49 IsShowTips = false; 50
      this.lbl.Image=Properties.Resources.ComboBox; 51 this.lbl.ImageAlign =
      ContentAlignment.MiddleRight; 52 base.BtnClick += UCDropDownBtn_BtnClick; 53 }
      54 55 void UCDropDownBtn_BtnClick(object sender, EventArgs e) 56 { 57 if
      (_frmAnchor ==null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false) 58
      { 59 60 if (Btns != null && Btns.Length > 0) 61 { 62 int intRow = 0; 63
      int intCom = 1; 64 var p = this.PointToScreen(this.Location); 65 while (true)
      66 { 67 int intScreenHeight = Screen.PrimaryScreen.Bounds.Height; 68 if
      ((p.Y +this.Height + Btns.Length / intCom * 50 < intScreenHeight || p.Y -
      Btns.Length / intCom *50 > 0) 69 && (_dropPanelHeight <= 0 ? true :
      (Btns.Length / intCom *50 <= _dropPanelHeight))) 70 { 71 intRow =
      Btns.Length / intCom + (Btns.Length % intCom !=0 ? 1 : 0); 72 break; 73 } 74
      intCom++; 75 } 76 UCTimePanel ucTime = new UCTimePanel(); 77
      ucTime.IsShowBorder =true; 78 int intWidth = this.Width / intCom; 79 80 Size
      size =new Size(intCom * intWidth, intRow * 50); 81 ucTime.Size = size; 82
      ucTime.FirstEvent =true; 83 ucTime.SelectSourceEvent +=
      ucTime_SelectSourceEvent; 84 ucTime.Row = intRow; 85 ucTime.Column = intCom;
      86 87 List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string,
      string>>(); 88 foreach (var item in Btns) 89 { 90 lst.Add(new KeyValuePair<
      string, string>(item, item)); 91 } 92 ucTime.Source = lst; 93 94
      _frmAnchor =new Forms.FrmAnchor(this, ucTime); 95 _frmAnchor.Load += (a, b) =>
      { (aas Form).Size = size; }; 96 97 _frmAnchor.Show(this.FindForm()); 98 99
      }100 } 101 else 102 { 103 _frmAnchor.Close(); 104 } 105 } 106 void
      ucTime_SelectSourceEvent(object sender, EventArgs e) 107 { 108 if (_frmAnchor
      !=null && !_frmAnchor.IsDisposed && _frmAnchor.Visible) 109 { 110
      _frmAnchor.Close();111 112 if (BtnClick != null) 113 { 114
      BtnClick(sender.ToString(), e);115 } 116 } 117 } 118 } 119 } View Code 1
      namespace HZH_Controls.Controls.Btn 2 { 3 partial class UCDropDownBtn 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 System.ComponentModel.ComponentResourceManager
      resources =new System.ComponentModel.ComponentResourceManager(typeof
      (UCDropDownBtn));32 this.SuspendLayout(); 33 // 34 // lbl 35 // 36 this
      .lbl.Font =new System.Drawing.Font("微軟雅黑", 14F); 37 this.lbl.ForeColor =
      System.Drawing.Color.White;38 this.lbl.ImageAlign =
      System.Drawing.ContentAlignment.MiddleRight;39 this.lbl.ImageList = null; 40
      this.lbl.Text = "自定義按鈕"; 41 this.lbl.TextAlign =
      System.Drawing.ContentAlignment.MiddleCenter;42 // 43 // UCDropDownBtn 44 // 45
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; 46 this.BtnFont =
      new System.Drawing.Font("微軟雅黑", 14F); 47 this.BtnForeColor =
      System.Drawing.Color.White;48 this.ForeColor = System.Drawing.Color.White; 49
      this.Image = ((System.Drawing.Image)(resources.GetObject("$this.Image"))); 50
      this.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; 51 this.Margin =
      new System.Windows.Forms.Padding(2); 52 this.Name = "UCDropDownBtn"; 53 this
      .ResumeLayout(false); 54 55 } 56 57 #endregion 58 } 59 } 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>
          久久99国产精品露脸老师 | 爆乳一区二区 | 全黄一级裸体 | 成人夜视频 | 亚洲激情av | 好爽要尿了又要喷了 | 思思热,思思热 | www.四虎成人网站 | 青青偷拍视频 | 欧美成人影院77777 |