如何在C#中捕捉面板上的鼠标滚轮?我正在使用WinForms
编辑:
我现在尝试在PictureBox上做这件事。
我的代码:
this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show("Click");
}单击即可正常工作。惠灵不知道。为什么?
发布于 2010-12-14 01:33:50
Windows将WM_MOUSEWHEEL消息发送到具有焦点的控件。这不会是Panel,它不是一个可以获得焦点的控件。只要你在面板上放置一个控件,比如说一个按钮,按钮就会获得焦点和消息。
然而,该按钮对消息没有任何作用,它没有什么可滚动的。Windows会注意到这一点,并将消息发送给父进程。这就是面板,现在它将滚动。
您将找到可以在this answer中获得焦点的自定义面板的代码。
更新:请注意,在Windows10中,这一行为已经改变。默认情况下,新的“当我将鼠标悬停在非活动窗口上时滚动它们”选项处于打开状态。使鼠标滚轮的行为与其在浏览器或Office程序中的工作方式更加一致。在此特定情况下,picturebox现在将获得事件。注意这一点。
发布于 2014-09-09 14:50:54
如果您看不到组件上的"MouseWheel“事件,则需要手动创建它。此外,我们需要关注该组件,否则"MouseWheel“事件将不会对该组件起作用。我将向您展示如何为"pictureBox1“创建一个"MouseWheel”事件以及它是如何工作的。
InitializeComponent();this.pictureBox1.MouseWheels +=手动pictureBox1_MouseWheel;
private void pictureBox1_MouseWheel(object sender,MouseEventArgs e) {//您可以在此处执行任何操作}
pictureBox1.Focus();
发布于 2010-12-13 22:47:04
手动布线..。
this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
private void panel1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
///process mouse event
}更简单的方法是在visual studio中单击面板,转到属性视图面板,选择事件,找到并双击“鼠标滚轮”事件。
https://stackoverflow.com/questions/4429901
复制相似问题