我正在尝试在ToolStripComboBox中禁用鼠标滚动,我以为我可以捕获鼠标滚轮事件,但是当事件可用于ComboBox时,它不适用于ToolStripComboBox。有什么想法吗?
答案 0 :(得分:1)
ToolStripComboBox
有助于在名称恰当的ComboBox
property中公开其基础ComboBox
控件。这允许我们访问未包含在ToolStripComboBox
中的属性,方法和事件。
而且,正如您可能知道的那样,标准ComboBox
控件会在组合框具有焦点时每次滚动鼠标滚轮时触发MouseWheel
event。
将这两件事放在一起,我们可以为ToolStripComboBox
控件的基础ComboBox
控件的MouseWheel
事件添加处理程序,并覆盖其默认行为。 < / p>
因此,假设您的表单包含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
控件进行子类化,并以与上面相同的方式覆盖其行为。
答案 1 :(得分:0)
除了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;
}
}
使用滚轮滚动下降的组合框不会改变选择,因此它按预期工作