我试图在我的 ToolStripComboBox 中禁用鼠标滚动,我想我可以捕捉到鼠标滚轮事件,但是虽然该事件可用于 ComboBox,但它不适用于 ToolStripComboBox。有任何想法吗?
问问题
3457 次
2 回答
3
有用地在其恰当命名的属性ToolStripComboBox
中公开其底层控制。这允许我们访问它的属性、方法和事件,这些属性、方法和事件没有被包装到.ComboBox
ComboBox
ToolStripComboBox
而且,您可能知道,标准ComboBox
控件公开了一个MouseWheel
事件,该事件在组合框获得焦点时每次滚动鼠标滚轮时触发。
把这两件事放在一起,我们可以为ToolStripComboBox
控件的底层ComboBox
控件的MouseWheel
事件添加一个处理程序,并覆盖它的默认行为。
因此,假设您有一个包含 aToolStrip
和 a的表单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
控件子类化并以与上面所示相同的方式覆盖其行为。
于 2010-11-24T08:29:01.740 回答
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;
}
}
使用滚轮滚动下拉组合框不会更改选择,因此可以按预期工作
于 2011-09-10T15:45:54.740 回答