| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- /*******************************************************************************
- * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
- * 类的信息:
- * 1.程序名称:C_CheckedListBox.cs
- * 2.功能描述:扩展的复选框列表控件:便于修改背景颜色及字体、颜色
- * 编辑履历:
- * 作者 日期 版本 修改内容
- * 陈晓野 2014/08/13 1.00 新建
- *******************************************************************************/
- using System;
- using System.ComponentModel;
- using System.Drawing;
- using System.Security.Permissions;
- using System.Text;
- using System.Windows.Forms;
- namespace Dongke.IBOSS.PRD.Basics.BaseControls
- {
- /// <summary>
- /// 扩展的复选框列表控件
- /// </summary>
- public partial class C_CheckedListBox : CheckedListBox
- {
- #region 成员变量
- private CheckState _selectedItemCheckState = CheckState.Unchecked;
- private Object _selectedItem = null;
- private bool _canMoveItem = false;
- #endregion
- #region 构造函数
- public C_CheckedListBox()
- {
- InitializeComponent();
- }
- #endregion
- #region 属性
- /// <summary>
- /// 获取或者设定列表的项目是否可以移动
- /// </summary>
- [DefaultValue(false)]
- public bool CanMoveItem
- {
- get
- {
- return _canMoveItem;
- }
- set
- {
- _canMoveItem = value;
- }
- }
- /// <summary>
- /// 获取或者设定选中的项目的数组
- /// </summary>
- public Object[] SelectedValues
- {
- get
- {
- System.Collections.Generic.List<Object> list =
- new System.Collections.Generic.List<Object>();
- foreach (CheckedBoxListItem item in this.CheckedItems)
- {
- list.Add(item.Value);
- }
- return list.ToArray();
- }
- set
- {
- if (value != null)
- {
- SetItemCheck(value);
- }
- }
- }
- /// <summary>
- /// 获取或者设定选中的项目的集合例如返回1,2,3
- /// </summary>
- [Description("获取或者设定选中的项目的集合.例如返回\"1,2,3\"")]
- public string SelectedArray
- {
- get
- {
- string array = "";
- foreach (CheckedBoxListItem item in this.CheckedItems)
- {
- array += "," + item.Value;
- }
- array = array.Substring(1);
- return array;
- }
- }
- #endregion
- #region 公开方法或者函数
- /// <summary>
- /// 往控件的项目中追加项目
- /// </summary>
- /// <param name="item">追加的项目</param>
- public void Add(CheckedBoxListItem item)
- {
- base.Items.Add(item);
- item.ParentControl = this;
- }
- /// <summary>
- /// 清除所有的选中状态
- /// </summary>
- public void ClearItemCheck()
- {
- for (int i = this.Items.Count - 1; 0 <= i; i--)
- {
- this.SetItemCheckState(i, CheckState.Unchecked);
- CheckedBoxListItem item = this.Items[i] as CheckedBoxListItem;
- if (item == null)
- {
- continue;
- }
- item.Checked = CheckState.Unchecked;
- }
- }
- /// <summary>
- /// 将所有项目设置成选中状态
- /// </summary>
- public void AllItemCheck()
- {
- for (int i = this.Items.Count - 1; 0 <= i; i--)
- {
- this.SetItemCheckState(i, CheckState.Checked);
- CheckedBoxListItem item = this.Items[i] as CheckedBoxListItem;
- if (item == null)
- {
- continue;
- }
- item.Checked = CheckState.Checked;
- }
- }
- #endregion
- #region 受保护的方法或者函数
- /// <summary>
- /// 将指定的项目设置成选中状态
- /// </summary>
- /// <param name="selectedValues">指定选中的项目</param>
- protected void SetItemCheck(Object[] selectedValues)
- {
- ClearItemCheck();
- for (int k = 0; k < selectedValues.Length; k++)
- {
- for (int i = this.Items.Count - 1; 0 <= i; i--)
- {
- CheckedBoxListItem item = this.Items[i] as CheckedBoxListItem;
- if (item == null)
- {
- continue;
- }
- if (selectedValues[k].ToString().Equals(item.Value.ToString()))
- {
- this.SetItemCheckState(i, CheckState.Checked);
- item.Checked = CheckState.Checked;
- break;
- }
- }
- }
- }
- #endregion
- #region 私有方法或者函数
- /// <summary>
- /// 控件的项目选中时的事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void CheckedListBox_ItemCheck(Object sender, ItemCheckEventArgs e)
- {
- if (this.Items[e.Index] is CheckedBoxListItem)
- {
- CheckedBoxListItem item = (CheckedBoxListItem)this.Items[e.Index];
- item.Checked = e.NewValue;
- }
- }
- #endregion
- #region 控件的事件
- /// <summary>
- /// 项目值选中状态事件
- /// </summary>
- /// <param name="e"></param>
- protected override void OnItemCheck(ItemCheckEventArgs e)
- {
- if (this.Items[e.Index] is CheckedBoxListItem)
- {
- CheckedBoxListItem item = (CheckedBoxListItem)this.Items[e.Index];
- if (item.Checked == e.NewValue)
- {
- return;
- }
- base.OnItemCheck(e);
- item.Checked = e.NewValue;
- }
- else
- {
- base.OnItemCheck(e);
- }
- }
- /// <summary>
- /// 鼠标点击事件,做移动处理
- /// </summary>
- /// <param name="e"></param>
- protected override void OnMouseDown(MouseEventArgs e)
- {
- base.OnMouseDown(e);
- if (0 <= this.SelectedIndex && e.Button == MouseButtons.Left)
- {
- _selectedItem = this.SelectedItem;
- _selectedItemCheckState = this.GetItemCheckState(this.SelectedIndex);
- this.ClearSelected();
- this.SelectedItem = _selectedItem;
- }
- }
- /// <summary>
- /// 鼠标移动事件,主要是项目移动
- /// </summary>
- /// <param name="e"></param>
- protected override void OnMouseUp(MouseEventArgs e)
- {
- base.OnMouseUp(e);
- if (_selectedItem != null)
- {
- if (_selectedItem == this.SelectedItem)
- {
- }
- else
- {
- if (0 <= this.SelectedIndex && this.CanMoveItem)
- {
- this.Items.Remove(_selectedItem);
- this.Items.Insert(this.SelectedIndex, _selectedItem);
- this.SetItemCheckState(this.SelectedIndex - 1, _selectedItemCheckState);
- }
- }
- }
- }
- #endregion
- }
- /// <summary>
- /// 控件的项目类
- /// </summary>
- public class CheckedBoxListItem
- {
- #region 成员变量
- // 选中项目的内容
- private string _displayString = string.Empty;
- // 选中项目的状态
- private CheckState _checked = CheckState.Unchecked;
- // 选中项目的值
- private Object _value = null;
- // ParentControl
- private C_CheckedListBox _parentControl = null;
- // 防止死循环
- private bool _canSynchronizeFlag = false;
- #endregion
- #region 构造函数
- /// <summary>
- /// 构造函数
- /// </summary>
- public CheckedBoxListItem()
- {
- }
- /// <summary>
- /// 控件的项目类的构造函数
- /// </summary>
- /// <param name="displayString">选中项目的内容</param>
- /// <param name="itemChecked">选中项目的状态</param>
- /// <param name="value">选中项目的值</param>
- public CheckedBoxListItem(string displayString, CheckState itemChecked, Object value)
- {
- _displayString = displayString;
- _checked = itemChecked;
- _value = value;
- }
- #endregion
- #region 属性
- /// <summary>
- /// 获取或者设定选中项目的内容
- /// </summary>
- public string DisplayString
- {
- get
- {
- return _displayString;
- }
- set
- {
- _displayString = value;
- }
- }
- /// <summary>
- /// 获取或者设定项目的选中状态
- /// </summary>
- public CheckState Checked
- {
- get
- {
- return _checked;
- }
- set
- {
- _checked = value;
- this.SetItemChecked();
- }
- }
- /// <summary>
- /// 获取或者设定项目的值
- /// </summary>
- public Object Value
- {
- get
- {
- return _value;
- }
- set
- {
- _value = value;
- }
- }
- /// <summary>
- /// 获取或者设定ParentControl属性
- /// </summary>
- public C_CheckedListBox ParentControl
- {
- get
- {
- return _parentControl;
- }
- set
- {
- _parentControl = value;
- this.SetItemChecked();
- }
- }
- #endregion
- #region 公开方法或者函数
- /// <summary>
- /// 选中项目的内容
- /// </summary>
- /// <returns>选中项目的内容</returns>
- public override string ToString()
- {
- return _displayString;
- }
- #endregion
- #region 受保护的方法或者函数
- /// <summary>
- /// 设定各项目的选中状态
- /// </summary>
- protected void SetItemChecked()
- {
- if (this.ParentControl == null)
- {
- return;
- }
- int index = this.ParentControl.Items.IndexOf(this);
- if (0 <= index
- && this.ParentControl.GetItemCheckState(index) != this.Checked
- && !_canSynchronizeFlag)
- {
- _canSynchronizeFlag = true;
- this.ParentControl.SetItemCheckState(index, this.Checked);
- _canSynchronizeFlag = false;
- }
- }
- #endregion
- }
- }
|