当前位置:  开发笔记 > 编程语言 > 正文

如何在PictureBox上检测按住鼠标按钮?

如何解决《如何在PictureBox上检测按住鼠标按钮?》经验,为你挑选了3个好方法。

我需要在鼠标位于PictureBox上方并且已经单击并按住鼠标按钮时触发事件.

问题:

MouseDown和MouseEnter事件处理程序不能很好地协同工作.

例如,一旦单击并按住鼠标按钮,C#将触发MouseDown事件处理程序,但是当光标移动到PictureBox上时,MouseEnter事件不会触发,直到鼠标按钮被重新发布.



1> Phil Wright..:

按下鼠标时,大多数控件将进入Control.Capture鼠标输入.这意味着所有MouseMove事件都被发送到捕获的原始控件而不是鼠标碰巧结束的控件.这一直持续到鼠标失去捕获,这通常发生在鼠标上.

如果你真的需要知道鼠标何时在你的控制之上,即使另一个控件捕获了鼠标输入,那么你只有一种方法.您需要窥探发往应用程序内其他控件的Windows消息.为此,您需要添加消息过滤器...

Application.AddMessageFilter(myFilterClassInstance);

然后你需要在合适的类上实现IMessageFilter ...

public class MyFilterClass : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == WM_MOUSEMOVE)
            // Check if mouse is over my picture box!

        return false;
    }
}

然后你会观察鼠标移动事件并检查它们是否在你的图片框上,并做你想做的任何事情.



2> Jeff Yates..:

鼠标事件

使用MouseDown事件只检测向下按下鼠标按钮并将this.Capture设置为true,这样您就可以获得其他鼠标事件,即使鼠标离开控件也是如此(即您捕获时不会获得MouseLeave事件鼠标).发生MouseUp时,通过将this.Capture设置为false来释放捕获.

只需检查鼠标的状态

这可能不相关,但您可以检查System.Windows.Control.MousePosition并查看它是否在PictureBox.ClientRectangle,然后检查Control.MouseButtons静态属性,可以随时关闭哪些按钮.

如:

if  (pictureBox.ClientRectangle.Contains(pictureBox.PointToClient(Control.MousePosition)))
{
   if ((Control.MouseButtons & MouseButtons.Left) != 0)
   {
     // Left button is down.
   }
}



3> 小智..:

在PictureBox控件中设置MouseMove事件:

this.myPictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.myPictureBox_MouseMove);

然后,在MouseMove事件处理程序中,检查是否按下了鼠标左键(或其他):

private void myPictureBox_MouseMove(object sender, MouseEventArgs e)
{  
     if (e.Button == MouseButtons.Left)
         // Do what you want to do
}

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有