| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- /*******************************************************************************
- * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
- * 类的信息:
- * 1.程序名称:C_CheckedListBoxEx.cs
- * 2.功能描述:扩展的复选框列表控件:可以多项选择
- * 编辑履历:
- * 作者 日期 版本 修改内容
- * 陈晓野 2014/09/04 1.00 新建
- *******************************************************************************/
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Security.Permissions;
- using System.Text;
- using System.Windows.Forms;
- namespace Dongke.IBOSS.PRD.Basics.BaseControls
- {
- /// <summary>
- /// 扩展的复选框列表控件:可以多项选择
- /// </summary>
- public partial class C_CheckedListBoxEx : DKCheckedListBox
- {
- #region 委托声明
- /// <summary>
- /// 表示将处理 System.Windows.Forms.CheckedListBox 控件或 System.Windows.Forms.ListView 控件的 ItemChecked 事件的方法。
- /// </summary>
- /// <param name="sender">事件源</param>
- /// <param name="e">包含事件数据的 System.Windows.Forms.ItemCheckEventArgs</param>
- public delegate void ItemCheckedEventHandler(object sender, ItemCheckEventArgs e);
- #endregion
- #region 事件声明
- /// <summary>
- /// 当某项的选中状态更改后发生
- /// </summary>
- private ItemCheckedEventHandler _onItemChecked;
- /// <summary>
- /// 当某项的选中状态更改后发生
- /// </summary>
- public event ItemCheckedEventHandler ItemChecked
- {
- add
- {
- this._onItemChecked = (ItemCheckedEventHandler)System.Delegate.Combine(this._onItemChecked, value);
- }
- remove
- {
- this._onItemChecked = (ItemCheckedEventHandler)System.Delegate.Remove(this._onItemChecked, value);
- }
- }
- #endregion
- #region 常量
- #endregion
- #region 成员变量
- #endregion
- #region 构造函数
- /// <summary>
- /// 构造函数
- /// </summary>
- public C_CheckedListBoxEx()
- {
- InitializeComponent();
- this.CheckOnClick = true;
- }
- #endregion
- #region 属性
- /// <summary>
- /// 获取或设置控件的数据源
- /// </summary>
- public new object DataSource
- {
- get
- {
- return base.DataSource;
- }
- set
- {
- base.DataSource = value;
- }
- }
- /// <summary>
- /// 获取或设置一个字符串,该字符串指定要显示其内容的列表框中所含对象的属性
- /// </summary>
- public new string DisplayMember
- {
- get
- {
- return base.DisplayMember;
- }
- set
- {
- base.DisplayMember = value;
- }
- }
- /// <summary>
- /// 获取或设置一个字符串,该字符串指定要从中取值的数据源的属性
- /// </summary>
- public new string ValueMember
- {
- get
- {
- return base.ValueMember;
- }
- set
- {
- base.ValueMember = 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 事件处理
- #endregion
- #region 公有方法/函数
-
- /// <summary>
- /// 返回指定项的成员属性的值
- /// </summary>
- /// <param name="item">项</param>
- /// <returns>值</returns>
- public virtual object GetItemValue(object item)
- {
- if (this.DataManager != null)
- {
- string dataMember = this.ValueMember;
- if (dataMember == null)
- {
- dataMember = string.Empty;
- }
- int num = dataMember.LastIndexOf(".");
- if (num != -1)
- {
- dataMember = dataMember.Substring(num + 1);
- }
- return this.FilterItemOnProperty(item, dataMember);
- }
- return null;
- }
- /// <summary>
- /// 返回选中项的文本表示形式
- /// </summary>
- /// <returns>选中项的文本</returns>
- public virtual List<string> GetCheckedTexts()
- {
- List<string> checkedTexts = new List<string>();
- foreach (object item in this.CheckedItems)
- {
- checkedTexts.Add(this.GetItemText(item));
- }
- return checkedTexts;
- }
- /// <summary>
- /// 返回选中项的成员属性的值
- /// </summary>
- /// <returns>选中项的值</returns>
- public virtual List<object> GetCheckedValues()
- {
- List<object> checkedValues = new List<object>();
- foreach (object item in this.CheckedItems)
- {
- checkedValues.Add(this.GetItemValue(item));
- }
- return checkedValues;
- }
- /// <summary>
- /// 返回选中项的文本表示形式
- /// </summary>
- /// <returns>选中项的文本</returns>
- public virtual string GetCheckedText()
- {
- StringBuilder checkedText = new StringBuilder();
- foreach (object item in this.CheckedItems)
- {
- if (checkedText.Length != 0)
- {
- checkedText.Append(ControlsConst.MULTIPLE_TEXT_SEPARATOR + this.GetItemText(item));
- }
- else
- {
- checkedText.Append(this.GetItemText(item));
- }
- }
- return checkedText.ToString();
- }
- /// <summary>
- /// 返回选中项的成员属性的值
- /// </summary>
- /// <returns>选中项的值</returns>
- public virtual string GetCheckedValue()
- {
- StringBuilder checkedValue = new StringBuilder();
- //for (int i = 0; i < this.Items.Count; i++)
- //{
- // if (this.GetItemChecked(i))
- // {
- // this.SetSelected(i, true);
- // if (checkedValue.Length != 0)
- // {
- // checkedValue.Append(ControlsConst.MULTIPLE_VALUE_SEPARATOR + this.SelectedValue.ToString());
- // }
- // else
- // {
- // checkedValue.Append(this.SelectedValue.ToString());
- // }
- // }
- //}
- foreach (object item in this.CheckedItems)
- {
- if (checkedValue.Length != 0)
- {
- checkedValue.Append(ControlsConst.MULTIPLE_VALUE_SEPARATOR + this.GetItemValue(item));
- }
- else
- {
- checkedValue.Append(this.GetItemValue(item));
- }
- }
- return checkedValue.ToString();
- }
- /// <summary>
- /// 选中全部项目
- /// </summary>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public virtual void SetAllItemChecked(bool value)
- {
- for (int i = 0; i < this.Items.Count; i++)
- {
- this.SetItemChecked(i, value);
- }
- }
- /// <summary>
- /// 选中指定索引的项目
- /// </summary>
- /// <param name="indexs">要为其设置复选状态的项的索引</param>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public virtual void SetItemsChecked(int[] indexs, bool value)
- {
- foreach (int index in indexs)
- {
- this.SetItemChecked(index, value);
- }
- }
- /// <summary>
- /// 选中指定项目
- /// </summary>
- /// <param name="item">要为其设置复选状态的项</param>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public virtual void SetItemCheckedByItem(object item, bool value)
- {
- for (int i = 0; i < this.Items.Count; i++)
- {
- object itemInner = this.Items[i];
- if (itemInner == item)
- {
- this.SetItemChecked(i, value);
- return;
- }
- }
- }
- /// <summary>
- /// 选中指定项目
- /// </summary>
- /// <param name="items">要为其设置复选状态的项</param>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public virtual void SetItemsCheckedByItem(object[] items, bool value)
- {
- foreach (object item in items)
- {
- this.SetItemCheckedByItem(item, value);
- }
- }
- /// <summary>
- /// 选中指定值的项目
- /// </summary>
- /// <param name="itemValue">要为其设置复选状态的项的值</param>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public virtual void SetItemCheckedByValue(object itemValue, bool value)
- {
- for (int i = 0; i < this.Items.Count; i++)
- {
- object itemValueInner = this.GetItemValue(this.Items[i]);
- if (itemValueInner == itemValue)
- {
- this.SetItemChecked(i, value);
- return;
- }
- }
- }
- /// <summary>
- /// 选中指定值的项目
- /// </summary>
- /// <param name="itemValues">要为其设置复选状态的项的值</param>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public virtual void SetItemsCheckedByValue(object[] itemValues, bool value)
- {
- foreach (object itemValue in itemValues)
- {
- this.SetItemCheckedByValue(itemValue, value);
- }
- }
- /// <summary>
- /// 将指定索引处的项的 System.Windows.Forms.CheckState 设置为 Checked
- /// </summary>
- /// <param name="index">要为其设置复选状态的项的索引</param>
- /// <param name="value">若要将该项设置为选中,则为 true;否则为 false</param>
- public new void SetItemChecked(int index, bool value)
- {
- this.SetItemCheckState(index, value ? CheckState.Checked : CheckState.Unchecked);
- }
- /// <summary>
- /// 设置指定索引处项的复选状态
- /// </summary>
- /// <param name="index">要为其设置状态的项的索引</param>
- /// <param name="value">System.Windows.Forms.CheckState 值之一</param>
- public new void SetItemCheckState(int index, CheckState value)
- {
- CheckState checkedState = this.GetItemCheckState(index);
- base.SetItemCheckState(index, value);
- if (value != checkedState)
- {
- ItemCheckEventArgs itemCheckEventArgs = new ItemCheckEventArgs(index, value, checkedState);
- this.OnItemChecked(itemCheckEventArgs);
- }
- }
- #endregion
- #region 受保护方法/函数
- /// <summary>
- /// 引发 System.Windows.Forms.CheckedListBox.ItemChecked 事件
- /// </summary>
- /// <param name="ice">包含事件数据的 System.Windows.Forms.ItemCheckEventArgs</param>
- protected virtual void OnItemChecked(ItemCheckEventArgs ice)
- {
- if (this._onItemChecked != null)
- {
- this._onItemChecked(this, ice);
- }
- }
- /// <summary>
- /// 引发 System.Windows.Forms.Control.KeyPress 事件
- /// </summary>
- /// <param name="e">所引发的 System.Windows.Forms.KeyPressEventArgs</param>
- protected override void OnKeyPress(KeyPressEventArgs e)
- {
- if (e.KeyChar == ' ' && this.SelectionMode != SelectionMode.None)
- {
- int selectedIndex = this.SelectedIndex;
- if (selectedIndex < 0 || selectedIndex >= this.Items.Count)
- {
- base.OnKeyPress(e);
- return;
- }
- CheckState checkedState = this.GetItemCheckState(selectedIndex);
- base.OnKeyPress(e);
- CheckState newCheckValue = this.GetItemCheckState(selectedIndex);
- if (checkedState != newCheckValue)
- {
- ItemCheckEventArgs itemCheckedEventArgs = new ItemCheckEventArgs(selectedIndex, newCheckValue, checkedState);
- this.OnItemChecked(itemCheckedEventArgs);
- }
- }
- else
- {
- base.OnKeyPress(e);
- }
- }
- /// <summary>
- /// 处理 System.Windows.Forms.CheckedListBox 控件从顶级窗口中接收的命令消息
- /// </summary>
- /// <param name="m">顶级窗口发送到此控件的 System.Windows.Forms.Message</param>
- [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
- protected override void WmReflectCommand(ref Message m)
- {
- int n = (int)((long)m.WParam);
- n = n >> 16 & 65535;
- switch (n)
- {
- case 1:
- case 2:
- int selectedIndex = this.SelectedIndex;
- if (selectedIndex < 0 || selectedIndex >= this.Items.Count)
- {
- base.WmReflectCommand(ref m);
- return;
- }
- CheckState checkedState = this.GetItemCheckState(selectedIndex);
- base.WmReflectCommand(ref m);
- CheckState newCheckValue = this.GetItemCheckState(selectedIndex);
- if (checkedState != newCheckValue)
- {
- ItemCheckEventArgs itemCheckEventArgs = new ItemCheckEventArgs(selectedIndex, newCheckValue, checkedState);
- this.OnItemChecked(itemCheckEventArgs);
- }
- return;
- default:
- base.WmReflectCommand(ref m);
- return;
- }
- }
- #endregion
- #region 私有方法/函数
- #endregion
- }
- }
|