// ***********************************************************************
// Assembly : HZH_Controls
// Created : 08-15-2019
//
// ***********************************************************************
//
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
//
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
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
{
///
/// Class UCBtnsGroup.
/// Implements the
///
///
public partial class UCBtnsGroup : UserControl
{
///
/// 选中改变事件
///
[Description("选中改变事件"), Category("自定义")]
public event EventHandler SelectedItemChanged;
///
/// The m data source
///
private Dictionary m_dataSource = new Dictionary();
///
/// 数据源
///
/// The data source.
[Description("数据源"), Category("自定义")]
public Dictionary DataSource
{
get { return m_dataSource; }
set
{
m_dataSource = value;
Reload();
}
}
///
/// The m select item
///
private List m_selectItem = new List();
///
/// 选中项
///
/// The select item.
[Description("选中项"), Category("自定义")]
public List SelectItem
{
get { return m_selectItem; }
set
{
m_selectItem = value;
if (m_selectItem == null)
m_selectItem = new List();
SetSelected();
}
}
///
/// The m is multiple
///
private bool m_isMultiple = false;
///
/// 是否多选
///
/// true if this instance is multiple; otherwise, false.
[Description("是否多选"), Category("自定义")]
public bool IsMultiple
{
get { return m_isMultiple; }
set { m_isMultiple = value; }
}
///
/// Initializes a new instance of the class.
///
public UCBtnsGroup()
{
InitializeComponent();
}
///
/// Reloads this instance.
///
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(5, 5);
btn.Margin = new System.Windows.Forms.Padding(5);
btn.Name = item.Key;
btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
btn.RectWidth = 1;
btn.Size = new System.Drawing.Size(72, 38);
btn.TabStop = false;
btn.BtnClick += btn_BtnClick;
this.flowLayoutPanel1.Controls.Add(btn);
}
}
}
finally
{
ControlHelper.FreezeControl(flowLayoutPanel1, false);
}
SetSelected();
}
///
/// Handles the BtnClick event of the btn control.
///
/// The source of the event.
/// The instance containing the event data.
void btn_BtnClick(object sender, EventArgs e)
{
var btn = sender as UCBtnExt;
if (m_selectItem.Contains(btn.Name))
{
btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
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[0] as UCBtnExt;
_btn.RectColor = System.Drawing.Color.FromArgb(224, 224, 224);
}
}
m_selectItem.Clear();
}
btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
m_selectItem.Add(btn.Name);
}
if (SelectedItemChanged != null)
SelectedItemChanged(this, e);
}
///
/// Sets the selected.
///
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[0] as UCBtnExt;
btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
}
}
}
else
{
UCBtnExt btn = null;
foreach (var item in m_selectItem)
{
var lst = this.flowLayoutPanel1.Controls.Find(item, false);
if (lst.Length == 1)
{
btn = lst[0] as UCBtnExt;
break;
}
}
if (btn != null)
{
m_selectItem = new List() { btn.Name };
btn.RectColor = System.Drawing.Color.FromArgb(255, 77, 59);
}
}
}
finally
{
ControlHelper.FreezeControl(flowLayoutPanel1, false);
}
}
}
}
}