鼠标移动到Combobox弹出列表上

时间:2011-08-18 23:28:41

标签: c# winforms combobox

当我的鼠标移动到Combobox弹出列表的底部时,列表会自动开始向下滚动。但是当我处于最底层并且进入顶部时,没有自动滚动效果,因此我想禁用此行为,只能以一种方式工作,向下...

我找不到任何属性,所以我尝试在该下拉列表上获取mousemove事件以取消它,或者让它被处理,但它只在组合框本身触发,而不是在列表上。

我还尝试在该列表的顶部创建一些东西,例如隐藏面板,它获取鼠标移动事件而不是下拉列表,但是我找不到任何有用的东西,但是这个列表始终位于所有内容的顶部。 / p>

另一个想法是找到一个事件,当弹出列表中显示的项被更改时执行,当鼠标没有抓住滚动条或点击它时停止它,但这也是不可能的。没有事件触发。只有selectedchanged事件,但这是选择不在scrool上的触发器。

有没有解决办法呢?

1 个答案:

答案 0 :(得分:0)

最后我找到了答案!!!

我的Combobox列表中有大约26行,这个行很大,所以我想每次只显示7行。

我找到DropDownHeight属性,并设置它:属性ItemHeight设置为13,而Font.Size为8,25(默认值)。 7 * 13 = 91.然后设置它。

DropDownHeight = 91

它的工作方式几乎完美,但是自动扫描存在问题。 (我在上面问过)

最后我意识到最后一行(这里是NNN)没有完全显示出来。当鼠标进入此行时,ComboBox Control会向我显示整行并将其向上滚动。

我开始改变尺寸并发现,当设置为93(= 7 * 13 + 2 )时,该线路完全显示。为什么2?可能是因为底部和顶部边界。现在没有自动滚动...

enter image description here

我也发现,另一种可能性是设置:

ComboBox1.IntegralHeight = False;
ComboBox1.MaxDropDownItems = 7;

这仅适用于DropDownHeight中没有变化的情况,我的情况下的默认值为 106 (= 8 * 13 + 2),默认值为{{1}是8.