首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使鼠标不动,Picturebox mousemove事件也会触发

即使鼠标不动,Picturebox mousemove事件也会触发
EN

Stack Overflow用户
提问于 2011-06-08 14:31:04
回答 2查看 2.4K关注 0票数 3

我正在开发一个Windows C#,VS2008应用程序。我有一个MDI Container表单,在单击按钮的过程中,我在运行时向其中添加了一个新表单。创建子窗体时,我在运行时向其添加了一个面板控件和一个图片框控件。

我为picturebox添加了鼠标释放、鼠标按下和鼠标移动的鼠标事件处理程序。鼠标向上和向下按预期工作,但当鼠标位于picturebox上且不移动时,鼠标移动事件将持续激发。我知道事件会被触发,因为在鼠标移动事件中,我保留了一个计数器变量,并在每次调用mousemove事件时递增并将值更新为标签。

这一切为什么要发生?下面是我使用的代码。

谢谢

代码语言:javascript
复制
            Form frm = new Form();
            frm.Deactivate += new EventHandler(MDIChildDeactivate);
            PictureBox pi = new PictureBox();
            pi.Dock = DockStyle.Fill;

            pi.MouseUp += new MouseEventHandler(ImageMouseUp);
            pi.MouseDown += new MouseEventHandler(ImageMouseDown);                
            pi.MouseMove += new MouseEventHandler(ImageMouseMove);
            pi.Paint += new PaintEventHandler(CanvasPaint);
            pi.KeyDown += new KeyEventHandler(ImageKeyDown);
            pi.KeyPress += new KeyPressEventHandler(ImageKeyPress);

            /////////////////////////////////////////////////////////
            pi.PreviewKeyDown += new PreviewKeyDownEventHandler(pi_PreviewKeyDown);
            /////////////////////////////////////////////////////////

            if (!IsTabbedMdi)
                frm.ClientSize = size;
            frm.AutoScroll = true;
            pi.Name = ProjectFileName;

            Panel pnl = new Panel();
            pnl.Dock = DockStyle.None;
            pnl.Size = WarpArt.Properties.Resources.GreyCheckerBoard.Size;
            pi.Image = WarpArt.Properties.Resources.GreyCheckerBoard;
            pnl.AutoScroll = true;
            pnl.HorizontalScroll.Visible = true;
            pnl.VerticalScroll.Visible = true;
            pnl.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            pnl.Name = ProjectFileName;

            pnl.Controls.Add(pi);
            frm.Controls.Add(pnl);
            frm.MdiParent = this;
            frm.Show();
EN

回答 2

Stack Overflow用户

发布于 2016-03-18 15:31:10

我也有类似的问题,当用鼠标在面板上移动图片时,它正在抖动。我使用了Control.MousePosition而不是MouseEventArgs.Location。它的发生是因为图片框MouseMove事件触发,即使鼠标本身不移动,但它是在PictureBox上。

票数 1
EN

Stack Overflow用户

发布于 2016-03-18 16:44:03

有多种方法可以规避这一点。然而,这可能是最简单的解决方案。虽然很脏,但很管用。

代码语言:javascript
复制
private void MouseMove(object sender, MouseEventArgs e)
        {
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                 //dosomething
                }
        }

为了解释这一点;当MouseMove事件被调用时,它不会做任何事情,除非(在本例中)按下鼠标左键。只有这样,if语句中的代码才会被执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6274999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档