Управление AutoComplete TextBox

Моим сервером является Dell R320, 12 ядра, сторожевой дренаж ЦП в большой степени, в среднем. 68%-е использование ЦП.

Добавляют, что следующие драйверы для помещения в черный список конфигурационного файла /etc/modprobe.d/blacklist.conf решили мою проблему

blacklist acpi_pad
blacklist mei
blacklist sb_edac
blacklist i7core_edac
18
задан marc_s 15 December 2016 в 13:05
поделиться

4 ответа

Возможно, это не лучший способ делать что-то, но он должен работать:

 this.textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
 this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

private void textBox1_TextChanged(object sender, EventArgs e)
{
    TextBox t = sender as TextBox;
    if (t != null)
    {
        //say you want to do a search when user types 3 or more chars
        if (t.Text.Length >= 3)
        {
            //SuggestStrings will have the logic to return array of strings either from cache/db
            string[] arr = SuggestStrings(t.Text);

            AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
            collection.AddRange(arr);

            this.textBox1.AutoCompleteCustomSource = collection;
        }
    }
}
36
ответ дан 30 November 2019 в 06:17
поделиться

Конечно, это зависит от того, как вы его реализуете, но, возможно, это хорошее начало:

using System.Windows.Forms;

public class AutoCompleteTextBox : TextBox {

    private string[] database;//put here the strings of the candidates of autocomplete
    private bool changingText = false;

    protected override void OnTextChanged (EventArgs e) {
        if(!changingText && database != null) {
            //searching the first candidate
            string typed = this.Text.Substring(0,this.SelectionStart);
            string candidate = null;
            for(int i = 0; i < database.Length; i++)
                if(database[i].Substring(0,this.SelectionStart) == typed) {
                    candidate = database[i].Substring(this.SelectionStart,database[i].Length);
                    break;
                }
            if(candidate != null) {
                changingText = true;
                this.Text = typed+candidate;
                this.SelectionStart = typed.Length;
                this.SelectionLength = candidate.Length;
            }
        }
        else if(changingText)
            changingText = false;
        base.OnTextChanged(e);
    }

}

Я не уверен, что это работает очень хорошо, но я думаю, что база этого кода достаточно хороша.

1
ответ дан 30 November 2019 в 06:17
поделиться

Обратите внимание на свойства AutoCompleteSource , AutoCompleteCustomSource и AutoCompleteMode .

textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection col = new AutoCompleteStringCollection();
col.Add("Foo");
col.Add("Bar");
textBox1.AutoCompleteCustomSource = col;

Обратите внимание, что конструктор позволяет вам это делать без написания кода ...

11
ответ дан 30 November 2019 в 06:17
поделиться

Вы можете присоединиться к событию KeyDown, а затем запросить в базе данных ту часть текста, которую пользователь уже ввел. Например, если пользователь вводит «Т», ищите вещи, которые начинаются с «Т». Затем, когда они вводят следующую букву, например «e», ищите в таблице вещи, которые начинаются с «Te».

Доступные элементы могут отображаться, например, в «плавающем» ListBox. Вам нужно будет разместить ListBox сразу под TextBox, чтобы они могли видеть доступные записи, а затем удалить ListBox, когда они закончат ввод.

0
ответ дан 30 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: