组合框自动完成:如何设置自定义“匹配模式”

时间:2012-04-23 13:35:21

标签: .net winforms autocomplete combobox

  

可能重复:
  C# AutoComplete

我有一个标准的winform组合框。我已将其AutoComplete属性设置为true。我想更改键入的文本和项目文本之间的比较,这是由UI自动完成的。

类似的东西:

autoCompleteCombo.XXXX = new Func<string, string, bool> { (search, item) => item.Contains(search) };

注意:写的函数只是一个例子。我真的想要更复杂一点。

1 个答案:

答案 0 :(得分:0)

由于您已更新了问题,因此我更了解您的问题。您还说过基础数据和功能不相关,这使得很难准确理解您要实现的目标,因此我的建议是创建自定义ComboBox并查看您是否可以处理匹配你自己。

<小时/> 我认为编写函数来测试类型化文本是ComboBox中的项目的最优雅方法是使用扩展方法。您的来电将如下所示:

// see if the Text typed in the combobox is in the autocomplete list
bool bFoundAuto = autoCompleteCombo.TextIsAutocompleteItem();

// see if the Text type in the combobox is an item in the items list
bool bFoundItem = autoCompleteCombo.TextIsItem();

可以按如下方式创建扩展方法,您可以在其中自定义搜索逻辑的工作方式。在我下面写的两个扩展方法中,他们只是检查ComboBox集合中是否找到了AutoCompleteCustomSource中输入的文本,或者在第二个函数中是否找到了文本中的文本。 Items集合。

public static class MyExtensions
{
    // returns true if the Text property value is found in the 
    // AutoCompleteCustomSource collection
    public static bool TextIsAutocompleteItem(this ComboBox cb)
    {
        return cb.AutoCompleteCustomSource.OfType<string>()
            .Where(a => a.ToLower() == cb.Text.ToLower()).Any();
    }

    // returns true of the Text property value is found in the Items col
    public static bool TextIsItem(this ComboBox cb)
    {
        return cb.Items.OfType<string>()
            .Where(a => a.ToLower() == cb.Text.ToLower()).Any();
    }
}