<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          (四)C# Winform自定義控件-選擇按鈕組

          共 39770字,需瀏覽 80分鐘

           ·

          2020-07-28 17:24

          (四)C# Winform自定義控件-選擇按鈕組

          準(zhǔn)備工作

          該控件是由多個(gè)按鈕組合形成的,類似多選框和單選框,需要用到前面我們說(shuō)到的控件UCBtnExt ,如果你對(duì)UCBtnExt 還不了解,請(qǐng)移步

          請(qǐng)移步 (二)c#Winform自定義控件-按鈕 查看

          我們先理一下思路,我們需要顯示多個(gè)按鈕,支持多選和單選,具有選中效果

          開始

          我們先看下有哪些屬性

          /// 
          /// 選中改變事件
          /// 

          public event EventHandler SelectedItemChanged;
          private Dictionary<stringstring> m_dataSource = new Dictionary<stringstring>();
          /// 
          /// 數(shù)據(jù)源
          /// 

          public Dictionary<stringstring> DataSource
          {
              get { return m_dataSource; }
              set
              {
                  m_dataSource = value;
                  Reload();
              }
          }

          private List<string> m_selectItem = new List<string>();
          /// 
          /// 選中項(xiàng)
          /// 

          public List<string> SelectItem
          {
              get { return m_selectItem; }
              set
              {
                  m_selectItem = value;
                  if (m_selectItem == null)
                      m_selectItem = new List<string>();
                  SetSelected();
              }
          }

          private bool m_isMultiple = false;
          /// 
          /// 是否多選
          /// 

          public bool IsMultiple
          {
              get { return m_isMultiple; }
              set { m_isMultiple = value; }
          }

          當(dāng)數(shù)據(jù)源改變的時(shí)候,需要加載按鈕到面板上

          private void Reload()
          {
              try
              {
                  ControlHelper.FreezeControl(flowLayoutPanel1, true);
                  this.flowLayoutPanel1.Controls.Clear();
                  if (DataSource != null)
                  {
                      foreach (var item in DataSource)
                      {
                          UCBtnExt btn = new UCBtnExt();
                          btn.BackColor = System.Drawing.Color.Transparent;
                          btn.BtnBackColor = System.Drawing.Color.White;
                          btn.BtnFont = new System.Drawing.Font("微軟雅黑"10F);
                          btn.BtnForeColor = System.Drawing.Color.Gray;
                          btn.BtnText = item.Value;
                          btn.ConerRadius = 5;
                          btn.Cursor = System.Windows.Forms.Cursors.Hand;
                          btn.FillColor = System.Drawing.Color.White;
                          btn.Font = new System.Drawing.Font("微軟雅黑"15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
                          btn.IsRadius = true;
                          btn.IsShowRect = true;
                          btn.IsShowTips = false;
                          btn.Location = new System.Drawing.Point(55);
                          btn.Margin = new System.Windows.Forms.Padding(5);
                          btn.Name = item.Key;
                          btn.RectColor = System.Drawing.Color.FromArgb(224224224);
                          btn.RectWidth = 1;
                          btn.Size = new System.Drawing.Size(7238);
                          btn.TabStop = false;
                          btn.BtnClick += btn_BtnClick;
                          this.flowLayoutPanel1.Controls.Add(btn);
                      }
                  }
              }
              finally
              {
                  ControlHelper.FreezeControl(flowLayoutPanel1, false);
              }
              SetSelected();
          }

          void btn_BtnClick(object sender, EventArgs e)
          {
              var btn = sender as UCBtnExt;
              if (m_selectItem.Contains(btn.Name))
              {
                  btn.RectColor = System.Drawing.Color.FromArgb(224224224);
                  m_selectItem.Remove(btn.Name);
              }
              else
              {
                  if (!m_isMultiple)
                  {
                      foreach (var item in m_selectItem)
                      {
                          var lst = this.flowLayoutPanel1.Controls.Find(item, false);
                          if (lst.Length == 1)
                          {
                              var _btn = lst[0as UCBtnExt;
                              _btn.RectColor = System.Drawing.Color.FromArgb(224224224);
                          }
                      }
                      m_selectItem.Clear();
                  }
                  btn.RectColor = System.Drawing.Color.FromArgb(2557759);
                  m_selectItem.Add(btn.Name);
              }
              if (SelectedItemChanged != null)
                  SelectedItemChanged(this, e);
          }

          如果設(shè)置了初始選中項(xiàng),那么還需要在加載后選中

          private void SetSelected()
          {
              if (m_selectItem != null && m_selectItem.Count > 0 && DataSource != null && DataSource.Count > 0)
              {
                  try
                  {
                      ControlHelper.FreezeControl(flowLayoutPanel1, true);
                      if (m_isMultiple)
                      {
                          foreach (var item in m_selectItem)
                          {
                              var lst = this.flowLayoutPanel1.Controls.Find(item, false);
                              if (lst.Length == 1)
                              {
                                  var btn = lst[0as UCBtnExt;
                                  btn.RectColor = System.Drawing.Color.FromArgb(2557759);
                              }
                          }
                      }
                      else
                      {
                          UCBtnExt btn = null;
                          foreach (var item in m_selectItem)
                          {
                              var lst = this.flowLayoutPanel1.Controls.Find(item, false);
                              if (lst.Length == 1)
                              {
                                  btn = lst[0as UCBtnExt;
                                  break;
                              }
                          }
                          if (btn != null)
                          {
                              m_selectItem = new List<string>() { btn.Name };
                              btn.RectColor = System.Drawing.Color.FromArgb(2557759);
                          }
                      }
                  }
                  finally
                  {
                      ControlHelper.FreezeControl(flowLayoutPanel1, false);
                  }
              }
          }

          至此所有的邏輯已經(jīng)處理完成,下面看下完整的代碼吧

          // 版權(quán)所有  黃正輝  交流群:568015492   QQ:623128629
          // 文件名稱:UCBtnsGroup.cs
          // 創(chuàng)建日期:2019-08-15 15:58:13
          // 功能描述:按鈕組
          // 項(xiàng)目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
          using System;
          using System.Collections.Generic;
          using System.ComponentModel;
          using System.Drawing;
          using System.Data;
          using System.Linq;
          using System.Text;
          using System.Windows.Forms;

          namespace HZH_Controls.Controls
          {
              public partial class UCBtnsGroup : UserControl
              {
                  /// 
                  /// 選中改變事件
                  /// 

                  public event EventHandler SelectedItemChanged;
                  private Dictionary<stringstring> m_dataSource = new Dictionary<stringstring>();
                  /// 
                  /// 數(shù)據(jù)源
                  /// 

                  public Dictionary<stringstring> DataSource
                  {
                      get { return m_dataSource; }
                      set
                      {
                          m_dataSource = value;
                          Reload();
                      }
                  }

                  private List<string> m_selectItem = new List<string>();
                  /// 
                  /// 選中項(xiàng)
                  /// 

                  public List<string> SelectItem
                  {
                      get { return m_selectItem; }
                      set
                      {
                          m_selectItem = value;
                          if (m_selectItem == null)
                              m_selectItem = new List<string>();
                          SetSelected();
                      }
                  }

                  private bool m_isMultiple = false;
                  /// 
                  /// 是否多選
                  /// 

                  public bool IsMultiple
                  {
                      get { return m_isMultiple; }
                      set { m_isMultiple = value; }
                  }
                  public UCBtnsGroup()
                  {
                      InitializeComponent();
                  }

                  private void Reload()
                  {
                      try
                      {
                          ControlHelper.FreezeControl(flowLayoutPanel1, true);
                          this.flowLayoutPanel1.Controls.Clear();
                          if (DataSource != null)
                          {
                              foreach (var item in DataSource)
                              {
                                  UCBtnExt btn = new UCBtnExt();
                                  btn.BackColor = System.Drawing.Color.Transparent;
                                  btn.BtnBackColor = System.Drawing.Color.White;
                                  btn.BtnFont = new System.Drawing.Font("微軟雅黑"10F);
                                  btn.BtnForeColor = System.Drawing.Color.Gray;
                                  btn.BtnText = item.Value;
                                  btn.ConerRadius = 5;
                                  btn.Cursor = System.Windows.Forms.Cursors.Hand;
                                  btn.FillColor = System.Drawing.Color.White;
                                  btn.Font = new System.Drawing.Font("微軟雅黑"15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
                                  btn.IsRadius = true;
                                  btn.IsShowRect = true;
                                  btn.IsShowTips = false;
                                  btn.Location = new System.Drawing.Point(55);
                                  btn.Margin = new System.Windows.Forms.Padding(5);
                                  btn.Name = item.Key;
                                  btn.RectColor = System.Drawing.Color.FromArgb(224224224);
                                  btn.RectWidth = 1;
                                  btn.Size = new System.Drawing.Size(7238);
                                  btn.TabStop = false;
                                  btn.BtnClick += btn_BtnClick;
                                  this.flowLayoutPanel1.Controls.Add(btn);
                              }
                          }
                      }
                      finally
                      {
                          ControlHelper.FreezeControl(flowLayoutPanel1, false);
                      }
                      SetSelected();
                  }

                  void btn_BtnClick(object sender, EventArgs e)
                  {
                      var btn = sender as UCBtnExt;
                      if (m_selectItem.Contains(btn.Name))
                      {
                          btn.RectColor = System.Drawing.Color.FromArgb(224224224);
                          m_selectItem.Remove(btn.Name);
                      }
                      else
                      {
                          if (!m_isMultiple)
                          {
                              foreach (var item in m_selectItem)
                              {
                                  var lst = this.flowLayoutPanel1.Controls.Find(item, false);
                                  if (lst.Length == 1)
                                  {
                                      var _btn = lst[0as UCBtnExt;
                                      _btn.RectColor = System.Drawing.Color.FromArgb(224224224);
                                  }
                              }
                              m_selectItem.Clear();
                          }
                          btn.RectColor = System.Drawing.Color.FromArgb(2557759);
                          m_selectItem.Add(btn.Name);
                      }
                      if (SelectedItemChanged != null)
                          SelectedItemChanged(this, e);
                  }

                  private void SetSelected()
                  {
                      if (m_selectItem != null && m_selectItem.Count > 0 && DataSource != null && DataSource.Count > 0)
                      {
                          try
                          {
                              ControlHelper.FreezeControl(flowLayoutPanel1, true);
                              if (m_isMultiple)
                              {
                                  foreach (var item in m_selectItem)
                                  {
                                      var lst = this.flowLayoutPanel1.Controls.Find(item, false);
                                      if (lst.Length == 1)
                                      {
                                          var btn = lst[0as UCBtnExt;
                                          btn.RectColor = System.Drawing.Color.FromArgb(2557759);
                                      }
                                  }
                              }
                              else
                              {
                                  UCBtnExt btn = null;
                                  foreach (var item in m_selectItem)
                                  {
                                      var lst = this.flowLayoutPanel1.Controls.Find(item, false);
                                      if (lst.Length == 1)
                                      {
                                          btn = lst[0as UCBtnExt;
                                          break;
                                      }
                                  }
                                  if (btn != null)
                                  {
                                      m_selectItem = new List<string>() { btn.Name };
                                      btn.RectColor = System.Drawing.Color.FromArgb(2557759);
                                  }
                              }
                          }
                          finally
                          {
                              ControlHelper.FreezeControl(flowLayoutPanel1, false);
                          }
                      }
                  }
              }
          }
          namespace HZH_Controls.Controls
          {
              partial class UCBtnsGroup
              {
                  ///  
                  /// 必需的設(shè)計(jì)器變量。
                  /// 

                  private System.ComponentModel.IContainer components = null;

                  ///  
                  /// 清理所有正在使用的資源。
                  /// 

                  ///  如果應(yīng)釋放托管資源,為 true;否則為 false。
                  protected override void Dispose(bool disposing)
                  {
                      if (disposing && (components != null))
                      {
                          components.Dispose();
                      }
                      base.Dispose(disposing);
                  }

                  #region 組件設(shè)計(jì)器生成的代碼

                  ///  
                  /// 設(shè)計(jì)器支持所需的方法 - 不要
                  /// 使用代碼編輯器修改此方法的內(nèi)容。
                  /// 

                  private void InitializeComponent()
                  {
                      this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
                      this.SuspendLayout();
                      // 
                      // flowLayoutPanel1
                      // 
                      this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
                      this.flowLayoutPanel1.Location = new System.Drawing.Point(00);
                      this.flowLayoutPanel1.Name = "flowLayoutPanel1";
                      this.flowLayoutPanel1.Size = new System.Drawing.Size(42050);
                      this.flowLayoutPanel1.TabIndex = 0;
                      // 
                      // UCBtnsGroup
                      // 
                      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
                      this.BackColor = System.Drawing.Color.White;
                      this.Controls.Add(this.flowLayoutPanel1);
                      this.MinimumSize = new System.Drawing.Size(050);
                      this.Name = "UCBtnsGroup";
                      this.Size = new System.Drawing.Size(42050);
                      this.ResumeLayout(false);

                  }

                  #endregion

                  private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
              }
          }

          用處及效果

          用處: 可以用選擇按鈕組來(lái)替換單選框和復(fù)選框,具有更和諧的界面效果

          效果:

          最后的話

          如果你喜歡的話,請(qǐng)到 https://gitee.com/kwwwvagaa/net_winform_custom_control 點(diǎn)個(gè)星星吧,另本站轉(zhuǎn)載地址:https://dotnet9.com/5270.html。

          • 作者:冰封一夏
          • 出處:http://www.hzhcontrols.com/doc.html
          • 本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明, 且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
          • GitHub:https://github.com/kwwwvagaa/NetWinformControl
          • 碼云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git

          Dotnet9網(wǎng)站常駐編輯


             

          長(zhǎng)按關(guān)注我,

          歡迎技術(shù)交流!

          -好東西要轉(zhuǎn)發(fā),設(shè)為"星標(biāo)"★搶先看-

          點(diǎn)擊閱讀原文,查看HZHControls站點(diǎn)更多博文。

          瀏覽 111
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  4438全国成人 | 一级操逼A片 | 伊人网视频 | 色婷婷色丁香五月天 | 亚洲 国产 另类 无码 日韩 |