Медленная прокрутка в ComboBox

76
9

У меня проблема, когда прокрутка как в toolStripComboBox, так и в обычном ComboBox очень медленная.


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


Здесь выпадающий список toolstrip:


        // 
// toolStripComboBoxDeild
//
this.toolStripComboBoxDeild.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.toolStripComboBoxDeild.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.toolStripComboBoxDeild.DropDownWidth = 121;
this.toolStripComboBoxDeild.Items.AddRange(new object[] {
"Allir"});
this.toolStripComboBoxDeild.Margin = new System.Windows.Forms.Padding(1, 0, 8, 0);
this.toolStripComboBoxDeild.MaxDropDownItems = 24;
this.toolStripComboBoxDeild.Name = "toolStripComboBoxDeild";
this.toolStripComboBoxDeild.Size = new System.Drawing.Size(200, 52);
this.toolStripComboBoxDeild.SelectedIndexChanged += new System.EventHandler(this.toolStripComboBoxDeild_SelectedIndexChanged);

Я добавляю остальные данные в combobox с помощью SqlDataReader (не используя набор данных, потому что мне удобно использовать sqlreader).


и регулярное поле со списком:


// 
// comboBox1
//
this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(77, 17);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(221, 21);
this.comboBox1.TabIndex = 1;
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);

Кто-нибудь сталкивался с этой проблемой? Если да, то что вы сделали для ее решения?


ИЗМЕНИТЬ


Изменение обработчика событий в SelectionChangeCommitted решило проблему с клавишами со стрелками, но не с помощью мыши.


Поведение прокрутки мыши только аберрантно, когда мышь находится над выпадающим списком. Когда я нажимаю стрелку вниз со стрелкой, не перемещая мышь и применяя колесо прокрутки, список прокручивается, как ожидалось.


EDIT 2


Выяснив проблему с прокруткой мыши, выяснилось, что это программное обеспечение и/или драйвер "Lenovo Mouse Suite". Удалил его и теперь все отлично.


Благодаря Джеффу Йетсу за то, что он показал мне событие SelectionChangeCommitted.

спросил(а) 2021-01-19T12:02:48+03:00 2 месяца, 4 недели назад
1
Решение
87

Когда вы используете клавиатуру, выбранный индекс изменяется. При использовании колеса прокрутки элемент под мышью изменяется, что также приведет к событию SelectedIndexChanged.
Поэтому, если ваш обработчик событий будет интенсивным при изменении индекса, он замедлит прокрутку, поскольку он будет запускаться каждый раз, когда изменяется выбранный индекс (т.е. Каждый раз, когда вы прокручиваете с помощью мыши или клавиатуры). Вы должны использовать SelectionChangeCommitted для обработки, когда выбор изменяется вместо этого, поскольку это будет срабатывать только после закрытия комбо.


Обновление

Итак, вы используете колесо мыши, когда комбо не упало? Если это так, то это по-прежнему обработка изменения выбора, так как каждый рулон колеса изменяет зафиксированный выбор. Прокрутка при отключении комбо не делает этого.

Я рекомендую вам добавить какой-то фильтр выбора с помощью таймера. Вы запускаете (и перезапускаете) таймер каждый раз, когда выделено выделение. Только когда срабатывает таймер, вы фактически обрабатываете изменение выбора. Таким образом, вы прокручиваете колесико мыши, не нанося при этом штраф за выбор. Обязательно остановите таймер, когда он стреляет, конечно.

ответил(а) 2021-01-19T12:02:48+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема