Подтвердить что ты не робот

Окно WinForms ComboBox DropDown и Autocomplete отображаются как

У меня есть ComboBox в приложении winforms с этим кодом:

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

DataTable t = new DataTable();
t.Columns.Add("ID", typeof(int));
t.Columns.Add("Display", typeof(string));

for (int i = 1; i < 2000; i++)
{
    t.Rows.Add(i, i.ToString("N0"));
}

comboBox1.DataSource = t;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "Display";

Затем я выполняю следующие шаги при открытии окна:

  • Нажмите кнопку ComboBox drop down - отображает список элементов и выбирает текст в ComboBox
  • Введите "5", "1"... т.е. я хочу использовать автозаполнение для поиска 515, 516 и т.д.
  • Вы увидите, что окно автозаполнения теперь отображается в верхней части выпадающего списка. Однако, если я нахожусь над ним, это скрытое выпадающее окно за окном автозаполнения, которое принимает события мыши, включая щелчок. Поэтому я думаю, что нажимаю на элемент автозаполнения, но на самом деле нажимаю на что-то совершенно случайное, которое я не вижу.

Является ли это ошибкой в ​​ ComboBox? Я использую Windows 7, если это имеет значение. Я как-то неправильно настроил ComboBox?

Обратите также внимание, что с помощью KEYBOARD используется раскрытие автозаполнения. Таким образом, клавиши со стрелками вверх/вниз используют переднее окно, но мышь использует обратное окно.

alt text http://i45.tinypic.com/2zybz92.png

4b9b3361

Ответ 1

Не пытайтесь воспроизвести это просто, установив свойства из PropertyGrid. Это ведет себя как в Win7, так и в Windows XP.

Это нарушенное поведение, описанное в этой статье обратной связи. Как указано, Microsoft не рассматривает исправление. Один из возможных способов обхода - отключить автозаполнение в обработчике событий DropDown и снова включить его в обработчике событий DropDownClosed.

Ответ 2

Добавьте одну строку кода в событие ComboBox KeyDown, и проблема будет решена!

private void comboBox_NameAndID_KeyDown(object sender, KeyEventArgs e)
{
    comboBox_NameAndID.DroppedDown = false;
}

Источник

Ответ 3

Я студент из Бразилии по кодированию, и я теряю много часов, пытаясь исправить это в моем проекте. И вот, я видел это через несколько секунд!

Мой код выглядит следующим образом:

private void populateCombos()
    {
        persist.ShowLst(dspMember, vlMember,varTable,lstBox,varWhere);
        persist.ShowLst(dspMember, vlMember,varTable,ddlist1,varWhere);
        persist.ShowLst(dspMember, vlMember,varTable, ddlist2,varWhere);

        ddList1.Text = null;
        ddList2.Text = null;

        lstBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        lstBox.AutoCompleteSource = AutoCompleteSource.ListItems;
        lstBox.Text = null;
    }

Ответ 4

Добавить в/на событие нажатия клавиши.

    Dim box As ComboBox = sender
    box.DroppedDown = False

Ответ 5

Это натянуто. Ваш код выглядит хорошо для меня, и я использовал эту функцию AutoComplete несколько раз и не показывал список DropDown и AutoComplete.

Мое предложение было бы

  • Установите DataSource после членов Display/Value. Я не могу вспомнить, почему, но другой вызвал некоторые проблемы.

    comboBox1.ValueMember = "ID";
    comboBox1.DisplayMember = "Display";
    comboBox1.DataSource = t;
    
  • Установите источник автозаполнения в конце вашего кода (после добавления DataSouce)

Может быть, это помогает.

Ответ 6

чтобы иметь только один открытый за раз, когда вы можете использовать comboBox1.Droppeddown = true открыть регулярный, false, автозаполнение будет отображаться только

Ответ 7

Вы просто добавляете элемент в коллекцию.

Теперь перейдите в список свойств опции combo box AutoCompleteSource = ListItems AutoCompleteMode = предложить

Примечание: у источника автозаполнения есть много вариантов согласно вашему требованию:)

Ответ 8

WinForms ComboBox DropDown... ответ на этот вопрос... напишите ниже код в comboBox1 Введите событие..

private void comboBox1_Enter(object sender, EventArgs e)
{
    comboBox1.DroppedDown = true;
}

Теперь для comboBox1 AutoComplete...
напишите это AutoComplete() в событии загрузки страницы. Так оно работает...

public void AutoComplete()
{
    try
    {
        MySqlConnection conn = new 
        MySqlConnection("server=localhost;database=databasename;user
            id=root;password=;charset=utf8;");
        MySqlCommand cmd = new MySqlCommand("select distinct
            (columnName) from tablename", conn);
        DataSet ds = new DataSet();
        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
        da.Fill(ds, "tablename");
        AutoCompleteStringCollection col = new
        AutoCompleteStringCollection();

        int i = 0;
        for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
        {
            col.Add(ds.Tables[0].Rows[i]["columnName"].ToString());
        }
        comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
        comboBox1.AutoCompleteCustomSource = col;
        comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
    MessageBoxIcon.Error);
    }
}

Ответ 9

Выберите ComboBox из проектного представления и установите "None" в свойство AutoCompleteMode.

Ответ 10

Выберите ComboBox из проектного представления и установите "Добавить" в свойство AutoCompleteMode, это предложит элемент без появления окна.