如何防止ToolStripComboBox中的鼠标滚动?
-
27-09-2019 - |
题
我试图在 ToolStripComboBox 中禁用鼠标滚动,我以为我可以捕获鼠标滚轮事件,但是虽然该事件可用于 ComboBox,但它不适用于 ToolStripComboBox。有任何想法吗?
解决方案
这 ToolStripComboBox
有助于暴露其底层 ComboBox
控制以其恰当的名称 ComboBox
财产. 。这允许我们访问它的属性、方法和事件,这些属性、方法和事件没有被包装到 ToolStripComboBox
.
而且,正如您可能知道的,标准 ComboBox
控件暴露了一个 MouseWheel
事件 当组合框具有焦点时,每次滚动鼠标滚轮时都会触发该事件。
将这两件事放在一起,我们可以为 ToolStripComboBox
控制的底层 ComboBox
控制的 MouseWheel
事件,并覆盖其默认行为。
因此,假设您有一个包含以下内容的表单 ToolStrip
和一个 ToolStripComboBox
, ,您可以使用类似以下代码的内容:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Attach a handler for the MouseWheel event
ToolStripComboBox1.ComboBox.MouseWheel += new MouseEventHandler(ToolStripComboBox_MouseWheel);
}
private void ToolStripComboBox_MouseWheel(object sender, MouseEventArgs e)
{
//Cast the MouseEventArgs to HandledMouseEventArgs
HandledMouseEventArgs mwe = (HandledMouseEventArgs)e;
//Indicate that this event was handled
//(prevents the event from being sent to its parent control)
mwe.Handled = true;
}
}
当然,您也可以随时对现有的子类进行分类 ToolStripComboBox
以与上面所示相同的方式控制和覆盖其行为。
其他提示
除了科迪什么建议灰色您可能希望在轮scolling工作时,组合框将被丢弃。只是再检查一下在鼠标滚轮手柄DroppedDown状态:
public class MyToolStripComboBox : ToolStripComboBox
{
public MyToolStripComboBox()
{
this.ComboBox.MouseWheel += new MouseEventHandler(ComboBox_MouseWheel);
}
void ComboBox_MouseWheel(object sender, MouseEventArgs e)
{
if (!this.ComboBox.DroppedDown)
((HandledMouseEventArgs)e).Handled = true;
}
}
滚动下降与轮组合框不改变选择,所以它可以按预期
不隶属于 StackOverflow