是的,你一定可以的...但它需要一些工作,使之无缝工作。这是我想出的一些代码。请记住,它不使用组合框的自动完成功能,如果你用它来筛选直通很多项目可能是相当缓慢......
string[] data = new string[] {
"Absecon","Abstracta","Abundantia","Academia","Acadiau","Acamas",
"Ackerman","Ackley","Ackworth","Acomita","Aconcagua","Acton","Acushnet",
"Acworth","Ada","Ada","Adair","Adairs","Adair","Adak","Adalberta","Adamkrafft",
"Adams"
};
public Form1()
{
InitializeComponent();
}
private void comboBox1_TextChanged(object sender, EventArgs e)
{
HandleTextChanged();
}
private void HandleTextChanged()
{
var txt = comboBox1.Text;
var list = from d in data
where d.ToUpper().StartsWith(comboBox1.Text.ToUpper())
select d;
if (list.Count() > 0)
{
comboBox1.DataSource = list.ToList();
//comboBox1.SelectedIndex = 0;
var sText = comboBox1.Items[0].ToString();
comboBox1.SelectionStart = txt.Length;
comboBox1.SelectionLength = sText.Length - txt.Length;
comboBox1.DroppedDown = true;
return;
}
else
{
comboBox1.DroppedDown = false;
comboBox1.SelectionStart = txt.Length;
}
}
private void comboBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Back)
{
int sStart = comboBox1.SelectionStart;
if (sStart > 0)
{
sStart--;
if (sStart == 0)
{
comboBox1.Text = "";
}
else
{
comboBox1.Text = comboBox1.Text.Substring(0, sStart);
}
}
e.Handled = true;
}
}
你可以通过jquery或ajax来做到这一点。创建一个方法,该方法接受一个字符串并返回匹配该字符串的结果列表,然后挂接视图中的jquery/ajax来监听击键和x次击键(通常为3次)后,让jquery调用方法并用结果填充列表。 – Brian 2012-08-02 15:30:34
嗯......这是在winform – algreat 2012-08-02 15:39:16
对不起,我开始专注于网络,但概念是相同的。有一个事件可以侦听键击并调用一个接收该字符串并返回结果集的方法。 – Brian 2012-08-02 15:56:23