怎样实现在ComboBox中键入文本自动根据Items中的内容调整Text的值
主 题: 怎样实现在ComboBox中键入文本自动根据Items中的内容调整Text的值
作 者: bobit (迎着风)
等 级: ^
信 誉 值: 100
所属论坛: .NET技术 C#
问题点数: 100
回复次数: 9
发表时间: 2003-9-9 10:07:14
继承System.Windows.Forms.ComboBox
希望实现在编辑区输入文本后模糊匹配Items中的值。
希望得到如下效果:
匹配后的文本呈选中状态显示在编辑区中,光标停留在键入的最后一个字符之后,而键入的字符取消选中状态要把匹配项填充到编辑区,而不是象IE浏览器一样只是把匹配项列出来。
回复人: rouser(我是一棵秋天的树) ( 五级(中级)) 信誉:98 2003-9-9 10:41:33 得分:0
private void comboBox1_TextChanged(object sender, System.EventArgs e) {
int i = this.comboBox1.FindString(this.comboBox1.Text);
this.comboBox1.Select(i,1);
}
回复人: rouser(我是一棵秋天的树) ( 五级(中级)) 信誉:98 2003-9-9 10:44:27 得分:0
修正一下
private void comboBox1_TextChanged(object sender, System.EventArgs e)
{
try
{
this.comboBox1.DroppedDown = true;
int i = this.comboBox1.FindString(this.comboBox1.Text);
this.comboBox1.Select(i,1);
}
catch{}
}
回复人: rouser(我是一棵秋天的树) ( 五级(中级)) 信誉:98 2003-9-9 10:52:55 得分:50
再更正一次
private void comboBox1_TextChanged(object sender, System.EventArgs e)
{
try
{
if(this.comboBox1.Text.Trim() == "")
return;
this.comboBox1.DroppedDown = false;
int i = this.comboBox1.FindString(this.comboBox1.Text);
this.comboBox1.Select(i,1);
this.comboBox1.DroppedDown = true;
SendKeys.Send("{DOWN}");
}
catch{}
}
回复人: bobit(迎着风) ( 一级(初级)) 信誉:100 2003-9-9 13:11:01 得分:0
TO: rouser(我是一棵秋天的树)
按你的办法只能匹配键入的首字符,而从键入的第2个字符开始就又重新匹配了
回复人: rouser(我是一棵秋天的树) ( 五级(中级)) 信誉:98 2003-9-9 14:07:47 得分:0
去掉
SendKeys.Send("{DOWN}");
回复人: bobit(迎着风) ( 一级(初级)) 信誉:100 2003-9-9 14:57:52 得分:0
还是不行,不如告诉我如何选中编辑区中的部分文本
比如
1234567 选中
4567
光标停留在3后面
回复人: qimini(循序渐进) ( 一星(中级)) 信誉:106 2003-9-9 16:11:20 得分:50
http://www.codeproject.com/combobox/combocompletion.asp?target=combobox%7Cauto
回复人: layershow(绿叶兄) ( 五级(中级)) 信誉:100 2003-9-9 17:09:07 得分:0
呵呵
回去再想想这个问题
回复人: bobit(迎着风) ( 一级(初级)) 信誉:100 2003-9-12 12:43:49 得分:0
找到实现方法了:
private bool _limitToList = true;
private bool _inEditMode = false;
protected override void OnTextChanged(System.EventArgs e)
{
if (_inEditMode)
{
string input = Text;
int index = FindString(input);
if (index >= 0)
{
_inEditMode = false;
SelectedIndex = index;
_inEditMode = true;
Select(input.Length, Text.Length);
}
}
base.OnTextChanged(e);
}
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
_inEditMode = (e.KeyCode != Keys.Back && e.KeyCode != Keys.Delete);
base.OnKeyDown(e);
}
该问题已经结贴 ,得分记录: rouser (50)、 qimini (50)、