C# 在组合框中缓慢滚动

C# 在组合框中缓慢滚动,c#,winforms,combobox,scroll,C#,Winforms,Combobox,Scroll,我有一个问题,在toolStripComboBox和常规ComboBox中滚动都非常慢 这可以通过使用箭头键和鼠标滚轮来实现。但是,如果我使用滚动条,它的行为与预期的一样 以下是toolstrip组合框: // // toolStripComboBoxDeild // this.toolStripComboBoxDeild.AutoCompleteMode = System.Windows.Forms.AutoCompleteM

我有一个问题,在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);
// 
        // 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);
我正在使用SqlDataReader在组合框中添加其余的数据(不使用数据集,因为我很习惯使用sqlreader)

和常规组合框:

        // 
        // 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);
// 
        // 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 找出了鼠标滚动的问题,原来是“联想鼠标套件”软件和/或驱动程序。卸载了它,现在一切正常


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

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

更新
那么,当组合没有放下时,您使用鼠标滚轮?如果是这种情况,则仍然是选择更改处理,因为每个滚轮将更改提交的选择。在下拉组合时滚动并不能做到这一点


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

嗨,杰夫,谢谢你的输入。我试过你的建议,但问题仍然存在。你还有其他见解吗?再次感谢您的帮助嗯,好吧,您是否在没有任何选择更改事件的情况下进行了尝试,以查看问题是否存在?请再次尝试(更加小心),并确认SelectionChangeCommitted解决了使用箭头键的滚动问题。检查编辑后的问题,查看鼠标滚动时的情况。我仍然认为选择与此有关,因为这可以解释为什么只有当鼠标位于列表上方时才会发生选择。有趣。鼠标滚轮没有触发提交事件。但我知道问题出在哪里了。这是联想鼠标套件和/或驱动程序。卸载,现在一切正常。