禁用滚动条件

时间:2013-07-26 06:03:44

标签: c# winforms scroll

我有一个里面有图像的SplitPanel。我设置了面板的AutoScroll,所以如果图片不适合面板,用户可以使用鼠标滚动。现在我想通过ctrl + scroll缩放图像。它可以通过面板的MouseWheel事件来完成。问题是:如何在按下ctrl时禁止滚动?我尝试使用HandledMouseEventArgs.Handled,但它似乎无效。

2 个答案:

答案 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;
  }
}