我有一个里面有图像的SplitPanel。我设置了面板的AutoScroll,所以如果图片不适合面板,用户可以使用鼠标滚动。现在我想通过ctrl + scroll缩放图像。它可以通过面板的MouseWheel事件来完成。问题是:如何在按下ctrl时禁止滚动?我尝试使用HandledMouseEventArgs.Handled
,但它似乎无效。
答案 0 :(得分:2)
您必须抓住发送到WM_MOUSEWHEEL
的{{1}}消息:
Panel
我忘记了您的面板停靠在public class CustomPanel : Panel {
public bool ScrollDisabled { get;set;}
protected override void WndProc(ref Message m){
if(m.Msg == 0x20a && ScrollDisabled) return; //WM_MOUSEWHEEL = 0x20a
//if(m.Msg == 0x20a && ModifierKeys == Keys.Control) return; <--- or do this directly.
base.WndProc(ref m);
}
}
内,无法将其分配给新实例。所以这是解决方案:
SplitContainer
答案 1 :(得分:0)
我想您必须实施KeyDown
以及KeyUp
事件,并检查是否已按下/释放CTRL
。
完成后,您可以在分区面板上停用Autoscroll
属性
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control)
{
splitpanel.AutoScroll = false;
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control)
{
splitpanel.AutoScroll = true;
}
}