![](/img/trans.png)
[英]Windows Forms: ctrl button prevents ListView from scrolling with mouse wheel
[英]Prevent Scrolling with Mouse Wheel in Windows Forms
我想在使用鼠標滾輪時防止面板滾動。 我已經嘗試將HandledMouseEventArgs
上的Handled
標志設置為false
,但這不起作用。
在此重現代碼中,我們有一個面板和一個按鈕。
using (var scrollTestForm=new Form())
{
var panel = new Panel() { Dock = DockStyle.Fill };
scrollTestForm.Controls.Add(panel);
var buttonOutsideArea = new Button();
buttonOutsideArea.Location = new System.Drawing.Point(panel.Width * 2, 100);
panel.Controls.Add(buttonOutsideArea);
panel.AutoScroll = true;
panel.MouseWheel += delegate (object sender, MouseEventArgs e)
{
((HandledMouseEventArgs)e).Handled = false;
};
scrollTestForm.ShowDialog();
}
使用鼠標滾輪時,面板會滾動。 如何防止它滾動?
您需要創建自定義控件和WM_MOUSEWHEEL 消息
所以首先創建一個新面板
public class PanelUnScrollable : Panel
{
protected override void WndProc(ref Message m)
{
if(m.Msg == 0x20a) return;
base.WndProc(ref m);
}
}
Edit ,或者如果你想控制是否可滾動(然后在你的主面板中你可以調用panel.ScrollDisabled = true
);
public class PanelUnScrollable : Panel
{
public bool ScrollDisabled { get; set; }
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x20a && ScrollDisabled) return;
base.WndProc(ref m);
}
}
然后以原始形式使用它
public Form2()
{
InitializeComponent();
CreateNewUnscrollablePanel();
}
public void CreateNewUnscrollablePanel()
{
using (var unScrollablePanel = new UnScrollablePanel() { Dock = DockStyle.Fill })
{
this.Controls.Add(unScrollablePanel);
var buttonOutsideArea = new Button();
buttonOutsideArea.Location = new System.Drawing.Point(unScrollablePanel.Width * 2, 100);
unScrollablePanel.Controls.Add(buttonOutsideArea);
unScrollablePanel.AutoScroll = true;
unScrollablePanel.ScrollDisabled = true; //-->call the panel propery
unScrollablePanel.MouseWheel += delegate(object sender, MouseEventArgs e) //--> you dont need this
{
((HandledMouseEventArgs)e).Handled = true;
};
this.ShowDialog();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.