MouseMove事件的触发原理是什么?

玫_瑰骑_士 2014-02-06 04:20:33


想要在窗体上(不是按钮上)MouseDown,之后移动鼠标,让那个按钮随着鼠标的运动而移动,而不是直接点击拖动那个按钮。【我承认我可能有点无聊= =】

结果我还是按照直接拖动按钮的方法写事件
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (MouseDown事件确实执行了)
{
int dx = e.X - x;
int dy = e.Y - y;

button1.Left += dx;
button1.Top += dy;
}
}


按钮移动异常地快,噌的一下就不见了。
所以干脆在MouseMove事件里放了个变量记录触发次数:



发现移动一小段距离竟然触发了80多次(难怪一下就不见了),
其实真要实现这个需求也可以不这么做,只是想问问:
MouseMove事件背后的触发原理究竟是什么?这个触发频率可以修改吗?
...全文
602 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
_monalisa 2014-05-09
  • 打赏
  • 举报
回复
private void Form1_MouseDown(object sender, MouseEventArgs e) { x = e.X; y = e.Y; } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (MouseDown事件确实执行了) { int dx = e.X - x; int dy = e.Y - y; button1.Left += dx; button1.Top += dy; x = e.X; y = e.Y; } } 这样写更简便,不需要更多的变量
玫_瑰骑_士 2014-02-06
  • 打赏
  • 举报
回复
引用 2 楼 rtdb 的回复:

int l;
int t;
private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
            l = button1.Left ;
            t = button1.Top ;
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (MouseDown事件确实执行了)
            {
                int dx = e.X - x;
                int dy = e.Y - y;
 
                button1.Left = l + dx;
                button1.Top = t + dy;
            }
        }
 
我2了= =,谢谢~
rtdb 2014-02-06
  • 打赏
  • 举报
回复

int l;
int t;
private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
            l = button1.Left ;
            t = button1.Top ;
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (MouseDown事件确实执行了)
            {
                int dx = e.X - x;
                int dy = e.Y - y;
 
                button1.Left = l + dx;
                button1.Top = t + dy;
            }
        }
 
rtdb 2014-02-06
  • 打赏
  • 举报
回复
和触发频率没关系,是你算错了 你的dx,dy是和鼠标按下时的偏差, 那么你的 button1.Left += dx; button1.Top += dy; 就不对了,累计了。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧