日期:2013-12-05  浏览次数:20600 次

在.Net的技术论坛里,有一次看到了某网友发了个帖子,大概的意思就是:假如数据库中有很多的记录读取到ComboBox中,恰好是大于1000条记录,如果要选择其中第500条记录,那不得烦死了啊?所以,最好是输入代码或者其他的助记符号就马上可以找到那条记录.

为此,我作了一个控件SearchComboBox.由于本人表达能力有限,不怎么好,就直接开始程序了

首先,建立一个项目Hexudong_ComboBox

然后添加一个类ItemName,具体代码如下

ItemName.cs

using System;

namespace Hexudong_ComboBox
{
/// <summary>
/// ItemName 的摘要说明。
/// </summary>
public class ItemName:object
{
private long _ID;
private string _Code;
private string _Name;
private string _PinYinCode;
private string _WuBiCode;
private string _DefineCode;
private string _Text;

public ItemName()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public ItemName(long id,string code,string name)
{
_ID=id;
_Code=code;
_Name=name;
_Text=_Code + " " + _Name;
}

public ItemName(long id,string code,string name,string pinyincode,string wubicode)
{
_ID=id;
_Code=code;
_Name=name;
_PinYinCode=pinyincode;
_WuBiCode=wubicode;
_Text=_Code + " " + _Name;
}

public ItemName(long id,string code,string name,string pinyincode,string wubicode,string definecode)
{
_ID=id;
_Code=code;
_Name=name;
_PinYinCode=pinyincode;
_WuBiCode=wubicode;
_DefineCode=definecode;
_Text=_Code + " " + _Name;
}

/// <summary>
/// ID号
/// </summary>
public long ID
{
get
{
return _ID;
}
set
{
_ID=value;
}
}

/// <summary>
/// 代码
/// </summary>
public string Code
{
get
{
return _Code;
}
set
{
_Code=value;
}
}

/// <summary>
/// 名称
/// </summary>
public string Name
{
get
{
return _Name;
}
set
{
_Name=value;
}
}

/// <summary>
/// 拼音码
/// </summary>
public string PinYinCode
{
get
{
return _PinYinCode;
}
set
{
_PinYinCode=value;
}
}

/// <summary>
/// 五笔码
/// </summary>
public string WuBiCode
{
get
{
return _WuBiCode;
}
set
{
_WuBiCode=value;
}
}

/// <summary>
/// 自定义码
/// </summary>
public string DefineCode
{
get
{
return _DefineCode;
}
set
{
_DefineCode=value;
}
}

/// <summary>
/// 控件文本
/// </summary>
public string Text
{
get
{
return _Text;
}
set
{
_Text = value;
}
}

/// <summary>
/// 重写ToString方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return _Text;
}
}
}


再添加一个类SearchComboBox,具体的代码如下:

SearchComboBox.cs

using System;
using System.Windows.Forms;
using System.Drawing;

namespace Hexudong_ComboBox
{
/// <summary>
/// SearchCombBox 的摘要说明。
/// </summary>
public class SearchComboBox:System.Windows.Forms.ComboBox
{
public SearchComboBox()
{
//
// TODO: 在此处添加构造函数逻辑
//
DrawMode = DrawMode.OwnerDrawFixed;
}

//根据输入文本框内容的Code查找相应的名称值并显示为代码+名称的字符串
protected override void OnKeyPress(KeyPressEventArgs e)
{
if(e.KeyChar==(char)13)
{
foreach(object obj in Items)
{
ItemName item