再次关于c#的组合框和自动完成

时间:2011-10-21 08:25:13

标签: c#

请帮助我制作方法,当用户在ComboBox中键入一些单词时,使用DropDownList并提供包含所有匹配项的列表,而不仅仅是第一个字母(标准方法自动完成)

我自己尝试编写它,但控件的行为不能像使用AutoCompleteMode那样好用

我不能做2个月,在所有网页上找到这个,看代码项目,似乎很长一段时间,我发现这个网站是一个使用自动完成的方法,但是在更改API之前。

抱歉我的语言(我的谷歌翻译帮助)

P.S。 我使用WinForms

1 个答案:

答案 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;
       }
  }

我希望它会帮助你......