我有一个带有图像的 SplitPanel。我设置了面板的自动滚动,所以如果图片不适合面板,用户可以使用鼠标滚动。现在我想通过 ctrl+scroll 来缩放图像。可以通过面板的 MouseWheel 事件来完成。问题是:按下 ctrl 时如何禁止滚动?我尝试使用HandledMouseEventArgs.Handled
,但它似乎不起作用。
问问题
1055 次
2 回答
2
您必须捕获WM_MOUSEWHEEL
发送到您的消息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
并且无法将其分配给新实例。所以这里是解决方案:
public class Form1 : Form {
public Form1(){
InitializeComponent();
//Suppose you want to disable scroll in Panel1 of your SplitContainer when Control key is pressed
new PanelWndProc().AssignHandle(splitContainer1.Panel1.Handle);
}
public class PanelWndProc : NativeWindow
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x20a && Control.ModifierKeys == Keys.Control) return;
base.WndProc(ref m);
}
}
}
于 2013-07-26T08:01:52.827 回答
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;
}
}
于 2013-07-26T06:06:35.093 回答