您的位置:首页 > 其它

winform中complete textbox,下拉自动完成控件

2009-12-22 16:48 309 查看


vs2005中textBox有AutoComplete的功能,但是在实际用到时发现效果并不太好。好像自动完成的数据源需要在窗体加载时就设置好,并不能根据textBox中实际输入的文本动态的查询数据库更改source中的信息。这是我自己的理解,或许有些地方我自己没有弄清楚吧。

最近遇到一个项目,用户在文本框中输入拼音时文本框自动下拉列出所有符合的记录,然后选择需要录入的信息。这个类似于火车站窗口卖票时,售票员只需要输入bj两个字母,下拉列出所有站名的声母是bj的站点。vs2005中提供的功能我没有实现这个功能,因此就自己写了这样的一个控件。

当然这个控件本身并不是只能用于输入拼音显示人名。下拉框的内容是可以动态指定的。

提供了几个自定义属性如下:



1.DropFont 就是下拉框的字体属性

2.DropHeight 就是下拉框最大高度

3.DropHeightFix 下拉框的高度是否根据里面的选项进行自动调整。如果为true那么下拉框选项很少的时候,下拉框的高度会自动的

收缩,如果下拉框选项很多,高度会增加,但是不会超过属性2指定的高度。建议使用true属性。因为在测试过程中

当下拉框下面有Grid控件的时候,显示效果不太理想。

4.DropItems 指定下拉框填充的内容,一般在程序中动态填充

5.HScrollbar 下拉框中的内容超过下拉框宽度时,是否显示水平滚动条

6.MaxItems 下拉框中最多填充的项数

7.Me 自己的个人信息,呵呵,只读的。有问题大家可以交流下。

8.Minletters 文本框中最少输入的字符,当输入字符数大于等于这个数字的时候下拉框开始感知

9.Text 文本框内容

10.TxtColor 文本框和下拉框字体颜色。

提供了一个自定义事件



这个是默认的事件。当文本框内容更改时会触发该事件。

private void dropTextBox2_TxtChanged(object sender, DropTextBox.TxtEvenargs e)
{

string txt = e.txt.Trim(); //参数e中包含了textBox当前的文本内容
if (e.txt.Length < dropTextBox2.Minletters) //如果文本内容小于Minletters不查询数据库
{
return;
}

int count = dropTextBox2.MaxItems;
string sql = " select top "+count.ToString ()+" * from users where py like '" + txt + "%' "; //查询语句

/*....

.....

具体查询过程就省略了,总之根据需要去查询数据库,然后返回DataTable,根据返回的DataTable中的数据构建字符串数组

将这个数组赋值给DropItems属性就可以了

......

*/

DataTable table = ......

//用DataTable中的数据构建字符串数组
ArrayList al = new ArrayList();
for (int i = 0; i < table.Rows.Count; i++)
{
if (!al.Contains(table.Rows[i]["uname"].ToString()))
{
al.Add(table.Rows[i]["uname"].ToString());
}
}

string[] s = (string[])al.ToArray(typeof(string));
dropTextBox2.DropItems = s;//赋值给DropItems

}


控件下载链接:http://download.csdn.net/source/1926226

http://download.csdn.net/source/2471392 (含使用demo)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: