在ComboBox中慢速滚动

时间:2009-04-20 14:23:58

标签: c# winforms combobox scroll

我有一个问题,在toolStripComboBox和常规ComboBox中滚动都很慢。

使用箭头键和鼠标滚轮都会发生这种情况。但是,如果我使用滚动条,它的行为与预期一样。

这是工具条组合框:

        // 
        // 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);

我正在使用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解决了箭头键的问题,但没有解决鼠标部分的问题。

当鼠标位于下拉列表上时,鼠标滚动行为仅为异常。当我单击组合框向下箭头而不移动鼠标并应用滚轮时,列表会按预期滚动。

编辑2

弄清楚鼠标滚动的问题,结果证明它是“Lenovo Mouse Suite”软件和/或驱动程序。卸载它,现在每个人都很好。

感谢Jeff Yates向我展示了SelectionChangeCommitted事件。

1 个答案:

答案 0 :(得分:3)

使用键盘时,selected index changes。使用滚轮时,鼠标下的项目会更改,这也会导致SelectedIndexChanged事件。 因此,如果索引更改时事件处理程序是密集的,它将减慢滚动速度,因为每次所选索引更改时(即每次使用鼠标或键盘滚动时)它都会运行。您应该使用SelectionChangeCommitted来处理选择更改的时间,因为这只会在组合关闭后触发。

<强>更新
那么,当组合没有掉下来时,你使用鼠标滚轮?如果是这种情况,那么它仍然是选择更改处理,因为每个滚轮将改变提交的选择。下拉组合时滚动不会这样做。

我建议您使用计时器添加某种选择过滤器。每次提交选择时,您都会启动(并重新启动)计时器。只有在计时器触发时才会实际处理选择更改。这样,您可以使用鼠标滚轮滚动,而不会每次都产生选择惩罚。当然,确保在计时器发生时停止计时器。