public partial class UCComboBox : DevExpress.XtraEditors.ComboBoxEdit
{
/// <summary>
/// 组件构造函数
/// </summary>
public UCComboBox()
{
InitializeComponent();
Initialize();
}
private void Initialize()
{
this.Properties.AutoComplete = true;
this.Properties.ImmediatePopup = true;
this.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
}
/// <summary>
/// 构造
/// </summary>
/// <param name="container"></param>
public UCComboBox(IContainer container)
{
container.Add(this);
InitializeComponent();
Initialize();
}
private string _itemValue = "";
/// <summary>
/// ComboBoxEdit选中值对应的索引
/// </summary>
[Browsable(false)]
public string ItemValue
{
get
{
return GetIndex(this._controlType.ToString(), this.Text);
}
set
{
_itemValue = value;
if (!DesignMode)
{
this.Text = this.GetComplexValueByIndex(_itemValue);
}
}
}
private string _itemDisplay = "";
/// <summary>
/// ComboBoxEdit选中的值
/// </summary>
[Browsable(false)]
public string ItemDisplay
{
get
{
return GetValue(this._controlType.ToString(), this.Text);
}
set { _itemDisplay = value; }
}
private CtrlType _controlType = CtrlType.默认;
/// <summary>
/// 控件类型属性
/// </summary>
[Description("选择控件类型"), Category("自定义")]
[DefaultValue(typeof(CtrlType), "默认")]
public CtrlType ControlType
{
get { return _controlType; }
set
{
_controlType = value;
if (!this.DesignMode)
{
if (_controlType != CtrlType.默认)
{
FillCombItem(_controlType.ToString());
}
}
}
}
private bool _emptyItem = false;
/// <summary>
/// 是否包含空行
/// </summary>
[Description("是否含有空行,非必录下拉框有空行,必录的下拉框不要加空行"), Category("自定义")]
[DefaultValue(typeof(bool), "false")]
public bool AEmptyItem
{
get
{
return _emptyItem;
}
set
{
_emptyItem = value;
if (!DesignMode && _emptyItem)
{
this.Properties.Items.Add("");
}
}
}
/// <summary>
/// 填充下拉框Item
/// </summary>
/// <param name="_ctrlname"></param>
private void FillCombItem(string _ctrlname)
{
Dictionary<string, string> dicItem = EnumFactory.EnumToTable(_ctrlname);
foreach (KeyValuePair<string, string> kvp in dicItem)
{
this.Properties.Items.Add(string.Format("{0} - {1}", kvp.Key, kvp.Value));
}
}
private List<EnumItem> _enumlist = new List<EnumItem>();
/// <summary>
/// 自定义枚举类型
/// </summary>
[Category("自定义")]
[Browsable(true)]
[Description("特殊的枚举,自定义枚举键值"),
ReadOnlyAttribute(false)]
public List<EnumItem> EnumList
{
get
{
return _enumlist;
}
set
{
if (_controlType == CtrlType.默认 && _enumlist.Count != 0 && !this.DesignMode)
{
_enumlist = value;
FillCombItem(_enumlist);
}
}
}
/// <summary>
/// 填充下拉框Item
/// </summary>
/// <param name="ctrlEnum"></param>
private void FillCombItem(List<EnumItem> ctrlEnum)
{
ctrlEnum.ForEach(enumitem =>
{
this.Properties.Items.Add(enumitem.EnumText);
});
}
/// <summary>
/// 获取comboboxEdit当前值所对应的索引值
/// </summary>
/// <param name="_ctrlname">控件类型</param>
/// <param name="content">当前选取值</param>
/// <returns></returns>
private string GetIndex(string _ctrlname, string content)
{
int start = content.IndexOf("-");
try
{
if (start > 0)
{
return content.Split('-')[0].Trim();
}
else
return GetIndexByValue(content);
}
catch (System.Exception err)
{
throw err;
}
}
/// <summary>
/// 获取comboboxEdit当前值所对应的值
/// </summary>
/// <param name="_ctrlname">控件类型</param>
/// <param name="content">当前选取值</param>
/// <returns></returns>
private string GetValue(string _ctrlname, string content)
{
int start = content.IndexOf("-");
try
{
if (start > 0)
{
return content.Split('-')[1].Trim();
}
else
return content;
}
catch (System.Exception err)
{
throw err;
}
}
/// <summary>
/// 通过Enum的索引获取对应的值
/// 无对应值是返回为空
/// </summary>
/// <param name="index">索引</param>
/// <returns></returns>
public string GetValueByIndex(string index)
{
try
{
foreach (string _item in this.Properties.Items)
{
int start = _item.IndexOf("-");
if (start > 0)
{
string[] arr = _item.Split('-');
if (arr[0].Trim().Equals(index))
{
return arr[1].Trim();
}
}
}
return "";
}
catch (System.Exception err)
{
throw err;
}
}
/// <summary>
/// 通过Enum的索引获取对应的值,形如:1-是
/// 无对应值是返回为空
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public string GetComplexValueByIndex(string index)
{
try
{
foreach (string _item in this.Properties.Items)
{
int start = _item.IndexOf("-");
if (start > 0)
{
string[] arr = _item.Split('-');
if (arr[0].Trim().Equals(index))
{
return _item;
}
}
}
return "";
}
catch (System.Exception err)
{
throw err;
}
}
/// <summary>
/// 获取comboboxEdit当前值所对应的索引值
/// 无对应值是返回为空
/// </summary>
/// <param name="content">当前选取值</param>
/// <returns></returns>
public string GetIndexByValue(string content)
{
try
{
foreach (string _item in this.Properties.Items)
{
int start = _item.IndexOf("-");
if (start > 0)
{
string[] arr = _item.Split('-');
if (arr[1].Trim().Equals(content))
{
return arr[0].Trim();
}
}
}
return "";
}
catch (System.Exception err)
{
throw err;
}
}
/// <summary>
/// 获取comboboxEdit当前值所对应的索引值
/// 无对应值是返回为空
/// </summary>
/// <param name="content">当前选取值,形如:1-是</param>
/// <returns></returns>
public string GetIndexByComplexValue(string content)
{
try
{
int start = content.IndexOf("-");
if (start > 0)
{
return content.Split('-')[0].Trim();
}
return "";
}
catch (System.Exception err)
{
throw err;
}
}
}