webbooker Ответов: 4

C# combobox разрешает только элементы списка, но разрешает ввод текста


Привет,

У меня есть combobox, который заполняется с помощью набора данных. Все в порядке. У меня есть AutoCompleteMode' значение 'SuggestAppend" и "AutoCompleteSource значение элементов listitem'. Это все прекрасно и работает. Проблема в том, что пользователь все еще может ввести любой старый текст, который он хочет. Я хочу, чтобы текущее поведение (suggest/append) с пользователем было в состоянии вводить материал, но я не хочу, чтобы они могли вводить что-либо, чего нет в элементах списка.

Я думаю, что мог бы справиться с одним из событий "фокуса", но есть ли лучший способ?????

Овации,
Штифтик

Gerry Logrosa

У меня то же самое с этим. Любое решение для этого, пожалуйста, напишите, если таковые имеются. спасибо

4 Ответов

Рейтинг:
2

Kim Togo

Взгляните на ComboBox.TextUpdate
Возможно, это может помочь
комбинированный список.TextUpdate


Рейтинг:
2

landy.lan2011

Это еще одно решение, которое реализовано на основе решения Джерри Логроса.


1. установите эти свойства
AutoCompleteMode = SuggestAppend
AutoCompleteSource = ListItems
DropDownStyle = ComboBoxStyle.выпадающий;

2.
private void comboBox1_KeyPress(отправитель объекта, KeyPressEventArgs e)
{
если (электронная.Ключевой-символ &ЛТ; 32 || Эл.Ключевой-символ &ГТ; 126)
{
вернуть;
}
строка t = comboBox1.Text;
string typedT = t.Substring(0, comboBox1.SelectionStart);
строка newT = typedT + e.KeyChar;

int i = comboBox1.FindString(newT);
если (i == -1)
{
е.Обработано = истина;
}
}

частная comboBox1_Leave недействительным(объект отправителя, EventArgs в электронной)
{
строка t = comboBox1.Text;

if (comboBox1.SelectedItem == null)
{
поле combobox1.Текст = "";
}
}


Надеюсь, что это может вам помочь. Пожалуйста, дайте мне знать, если возникнут какие-либо проблемы.


Member 11615391

введите текст ниб Хо РГА

Рейтинг:
0

Peter_in_2780

У меня нет подходящего docco под рукой, но есть свойство типа стиля с именем типа "DropDownList", которое отключает типизированную запись, но все же позволяет поиск "автозаполнения".
Удачи,
Питер


Sandeep Mewara

Комментарий от OP: Спасибо за быстрый ответ Питер, но когда вы меняете стиль на "DropDownList", пользователь больше не может вводить запись. Это важно (в моем случае), потому что количество записей очень много

Рейтинг:
0

Gerry Logrosa

Привет,

Пожалуйста, попробуйте это решение. Это работает на моей стороне.

В поле со списком вы

1. установите эти свойства
AutoCompleteMode = SuggestAppend
AutoCompleteSource = Нет
DropDownStyle = ComboBoxStyle.выпадающий;

2. Добавьте дескриптор события нажатия клавиши и запишите это

public virtual void Cbo_KeyPress(object sender, KeyPressEventArgs e)
{
    ComboBox cb = (ComboBox)sender;
    cb.DroppedDown = true;
    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 = true;
}




Спасибо. Надеюсь, это поможет!


CHill60

Я подозреваю, что почти через 3 года после публикации этого вопроса ОП либо решила эту проблему, либо перешла к другим вещам

ayushmidha

это работает нормально но есть небольшая проблема с этим кодом в то время как backspace it select text но я хочу стереть txt ono одним символом
спасибо заранее

Member 12949179

хорошее решение