Как мне отфильтровать ListBox на основе ввода из TextBox? - PullRequest
1 голос
/ 28 февраля 2010

Я новичок в программировании. Мне нужна помощь в отношении того, как фильтровать список с помощью текстового поля в приложении c #.

Я имею в виду, введите некоторый текст в текстовое поле и отфильтруйте то же самое время в списке, если элементы выходят из списков, затем выберите в текстовом поле, иначе откройте новую форму для создания элементов.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2010

Вот простое текстовое поле автозаполнения, которое вы можете использовать для своих нужд:

class AutoSuggestControl : TextBox
{
    List<string> Suggestions;
    int PreviousLength; 

    public AutoSuggestControl() : base()
    {
        Suggestions = new List<string>();

        // We keep track of the previous length of the string
        // If the user tries to delete characters we do not interfere
        PreviousLength = 0; 

        // Very basic list, too slow to be suitable for systems with many entries
        foreach(var e in yourListbox.Items)
        {
            //add your listbox items to the textbox
        }
        Suggestions.Sort();
    }

    /// <summary>
    /// Search through the collection of suggestions for a match
    /// </summary>
    /// <param name="Input"></param>
    /// <returns></returns>

    private string FindSuggestion(string Input)
    {
        if (Input != "")
        foreach (string Suggestion in Suggestions)
        {
            if (Suggestion.StartsWith(Input))
                return Suggestion;
        }
        return null;
    }

    /// <summary>
    /// We only interfere after receiving the OnTextChanged event.
    /// </summary>
    /// <param name="e"></param>
    protected override void OnTextChanged(EventArgs e)
    {
        base.OnTextChanged(e);

        // We don't do anything if the user is trying to shorten the sentence
        int CursorPosition = SelectionStart;
        if (Text.Length > PreviousLength && CursorPosition >= 0)
        {
            string Suggestion = FindSuggestion(Text.Substring(0, CursorPosition));
            if (Suggestion != null)
            {
                // Set the contents of the textbox to the suggestion
                Text = Suggestion;
                // Setting text puts the cursor at the beginning of the textbox, so we need to reposition it
                Select(CursorPosition, 0);
            }
        }
        PreviousLength = Text.Length;
    }

}
0 голосов
/ 12 марта 2013

Этот элемент управления поддерживает фильтрацию. Это также выделит буквы, которые вы пытаетесь отфильтровать. Чтобы обойти это, в вашем случае, нежелательное поведение, я предлагаю изменить шрифт «жирный» на обычный шрифт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...