我正在尝试在我的ToolStripComboBox中禁用鼠标滚动,我以为我可以捕捉鼠标滚轮事件,但是虽然该事件在ComboBox上可用,但它不能用于ToolStripComboBox。有什么想法吗?
发布于 2010-11-24 16:29:02
ToolStripComboBox在其恰当命名的ComboBox property中公开了其底层ComboBox控件,这很有帮助。这允许我们访问它的属性、方法和事件,这些属性、方法和事件没有包装到ToolStripComboBox中。
而且,您可能知道,标准的ComboBox控件公开了一个MouseWheel event,当组合框具有焦点时,每次滚动鼠标滚轮时都会触发该And。
将这两件事放在一起,我们就可以为ToolStripComboBox ComboBox 控件的基础ToolStripComboBox控件的 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控件,并以上面所示的相同方式覆盖它的行为。
发布于 2011-09-10 23:45:55
除了Cody Gray建议的之外,您可能还想让轮子在组合框被丢弃时工作。只需检查MouseWheel句柄中的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;
}
}使用滚轮滚动拖放的组合框不会更改选择,因此它的工作方式与预期一致
https://stackoverflow.com/questions/4264579
复制相似问题