1

重複の可能性:
C# オートコンプリート

私は標準のwinformコンボボックスを持っています。AutoComplete プロパティを true に設定しました。UI によって自動的に行われる入力テキストと項目テキストの比較を変更したいと考えています。

何かのようなもの:

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

注: 記述された関数は単なる例です。私が本当に欲しいのはもう少し複雑です。

4

1 に答える 1

0

質問を更新したので、質問がよくわかりました。また、基礎となるデータと機能が適切ではないとおっしゃっているため、何を達成しようとしているのかを正確に理解することが難しくなっています。そのため、カスタムを作成してComboBox、自分でマッチングを処理できるかどうかを確認することをお勧めします。 .


ComboBox入力されたテキストが a のアイテムであるかどうかをテストする関数を作成する最もエレガントな方法は、拡張メソッドを使用すること だと思います。呼び出しは次のようになります。

// 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();

拡張メソッドは次のように作成でき、検索ロジックがどのように機能するかを正確にカスタマイズできます。以下に記述した 2 つの拡張メソッドでは、入力されたテキストComboBoxAutoCompleteCustomSourceコレクション内にあるかどうか、または 2 番目の関数でテキストがコレクション内にあるかどうかを確認するだけ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();
    }
}   
于 2012-04-24T00:04:45.437 に答える