请帮助我制作方法,当用户在ComboBox中键入一些单词时,使用DropDownList并提供包含所有匹配项的列表,而不仅仅是第一个字母(标准方法自动完成)
我自己尝试编写它,但控件的行为不能像使用AutoCompleteMode那样好用
我不能做2个月,在所有网页上找到这个,看代码项目,似乎很长一段时间,我发现这个网站是一个使用自动完成的方法,但是在更改API之前。
抱歉我的语言(我的谷歌翻译帮助)
P.S。 我使用WinForms
答案 0 :(得分:0)
你可以做这样的事......
从ComboBox的KeyPress事件处理程序中调用AutoComplete函数。
AutoComplete(ComboBox cb, System.Windows.Forms.KeyPressEventArgs e, bool blnLimitToList)
// AutoComplete
public void AutoComplete(ComboBox cb, System.Windows.Forms.KeyPressEventArgs e)
{
this.AutoComplete(cb, e, false);
}
public void AutoComplete(ComboBox cb,System.Windows.Forms.KeyPressEventArgs e, bool blnLimitToList)
{
string strFindStr = "";
if (e.KeyChar == (char)8)
{
if (cb.SelectionStart <= 1)
{
cb.Text = "";
return;
}
if (cb.SelectionLength == 0)
strFindStr = cb.Text.Substring(0, cb.Text.Length - 1);
else
strFindStr = cb.Text.Substring(0, cb.SelectionStart - 1);
}
else
{
if (cb.SelectionLength == 0)
strFindStr = cb.Text + e.KeyChar;
else
strFindStr = cb.Text.Substring(0, cb.SelectionStart) + e.KeyChar;
}
int intIdx = -1;
// Search the string in the ComboBox list.
intIdx = cb.FindString(strFindStr);
if (intIdx != -1)
{
cb.SelectedText = "";
cb.SelectedIndex = intIdx;
cb.SelectionStart = strFindStr.Length;
cb.SelectionLength = cb.Text.Length;
e.Handled = true;
}
else
{
e.Handled = blnLimitToList;
}
}
我希望它会帮助你......