1 // 版权所有 黄正辉 交流群:568015492 QQ:623128629
2 // 文件名称:UCBtnsGroup.cs
3 // 创建日期:2019-08-15 15:58:13
4 // 功能描述:按钮组
5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
6 using System;
7 using System.Collections.Generic;
8 using System.ComponentModel;
9 using System.Drawing;
10 using System.Data;
11 using System.Linq;
12 using System.Text;
13 using System.Windows.Forms;
14
15 namespace HZH_Controls.Controls
16 {
17 public partial class UCBtnsGroup : UserControl
18 {
19 /// <summary>
20 /// 选中改变事件
21 /// </summary>
22 public event EventHandler SelectedItemChanged;
23 private Dictionary<string, string> m_dataSource = new Dictionary<string, string>();
24 /// <summary>
25 /// 数据源
26 /// </summary>
27 public Dictionary<string, string> DataSource
28 {
29 get { return m_dataSource; }
30 set
31 {
32 m_dataSource = value;
33 Reload();
34 }
35 }
36
37 private List<string> m_selectItem = new List<string>();
38 /// <summary>
39 /// 选中项
40 /// </summary>
41 public List<string> SelectItem
42 {
43 get { return m_selectItem; }
44 set
45 {
46 m_selectItem = value;
47 if (m_selectItem == null)
48 m_selectItem = new List<string>();
49 SetSelected();
50 }
51 }
52
53 private bool m_isMultiple = false;
54 /// <summary>
55 /// 是否多选
56 /// </summary>
57 public bool IsMultiple
58 {
59 get { return m_isMultiple; }
60 set { m_isMultiple = value; }
61 }
62 public UCBtnsGroup()
63 {
64 InitializeComponent();
65 }
66
67 private void Reload()
68 {
69 try
70 {
71 ControlHelper.FreezeControl(flowLayoutPanel1, true);
72 this.flowLayoutPanel1.Controls.Clear();
73 if (DataSource != null)
74 {
75 foreach (var item in DataSource)
76 {
77 UCBtnExt btn = new UCBtnExt();
78 btn.BackColor = System.Drawing.Color.Transparent;
79 btn.BtnBackColor = System.Drawing.Color.White;
80 btn.BtnFont = new System.Drawing.Font("微软雅黑", 10F);
81 btn.BtnForeColor = System.Drawing.Color.Gray;
82 btn.BtnText = item.Value;
83 btn.ConerRadius = 5;
84 btn.Cursor = System.Windows.Forms.Cursors.Hand;
85 btn.FillColor = System.Drawing.Color.White;
86 btn.Font = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);
87 btn.IsRadius = true;
88 btn.IsShowRect = true;
89 btn.IsShowTips = false;
90 btn.Location = new System.Drawing.Point(5, 5);
91 btn.Margin = new System.Windows.Forms.Padding(5);
92 btn.Name = item.Key;
93 btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
94 btn.RectWidth = 1;
95 btn.Size = new System.Drawing.Size(72, 38);
96 btn.TabStop = false;
97 btn.BtnClick += btn_BtnClick;
98 this.flowLayoutPanel1.Controls.Add(btn);
99 }
100 }
101 }
102 finally
103 {
104 ControlHelper.FreezeControl(flowLayoutPanel1, false);
105 }
106 SetSelected();
107 }
108
109 void btn_BtnClick(object sender, EventArgs e)
110 {
111 var btn = sender as UCBtnExt;
112 if (m_selectItem.Contains(btn.Name))
113 {
114 btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
115 m_selectItem.Remove(btn.Name);
116 }
117 else
118 {
119 if (!m_isMultiple)
120 {
121 foreach (var item in m_selectItem)
122 {
123 var lst = this.flowLayoutPanel1.Controls.Find(item, false);
124 if (lst.Length == 1)
125 {
126 var _btn = lst[0] as UCBtnExt;
127 _btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
128 }
129 }
130 m_selectItem.Clear();
131 }
132 btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
133 m_selectItem.Add(btn.Name);
134 }
135 if (SelectedItemChanged != null)
136 SelectedItemChanged(this, e);
137 }
138
139 private void SetSelected()
140 {
141 if (m_selectItem != null && m_selectItem.Count > 0 && DataSource != null && DataSource.Count > 0)
142 {
143 try
144 {
145 ControlHelper.FreezeControl(flowLayoutPanel1, true);
146 if (m_isMultiple)
147 {
148 foreach (var item in m_selectItem)
149 {
150 var lst = this.flowLayoutPanel1.Controls.Find(item, false);
151 if (lst.Length == 1)
152 {
153 var btn = lst[0] as UCBtnExt;
154 btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
155 }
156 }
157 }
158 else
159 {
160 UCBtnExt btn = null;
161 foreach (var item in m_selectItem)
162 {
163 var lst = this.flowLayoutPanel1.Controls.Find(item, false);
164 if (lst.Length == 1)
165 {
166 btn = lst[0] as UCBtnExt;
167 break;
168 }
169 }
170 if (btn != null)
171 {
172 m_selectItem = new List<string>() { btn.Name };
173 btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
174 }
175 }
176 }
177 finally
178 {
179 ControlHelper.FreezeControl(flowLayoutPanel1, false);
180 }
181 }
182 }
183 }
184 }