none
鼠标跟踪事件 RRS feed

  • 问题

  •   怎么实现在按住鼠标左键的情况下才跟踪鼠标,从而实现在鼠标移动时出现跟踪线(两点之间的线段,已经有一实点,在鼠标左击时产生虚点,按住左键移动鼠标时产生动态线段(即跟踪线))!急求帮助~~感谢!
    2010年12月16日 8:30

答案

  • dear
    你可以使用MouseDown + Mouse + MouseUp事件来达成你要的目的
    MouseDown 发生时时画下第一点
    Mouse 发生时记下移动的坐标,并画出
    MouseUp 发生时可把那些记下来的坐标连起来,看你自己的需求

    你可参考
    [[C#.NET][VB.NET] 程式執行時拖曳控制項]
    http://www.dotblogs.com.tw/yc421206/archive/2010/06/21/16039.aspx
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月16日 9:58
  • Hi 学者,

    我找到了一个样例,经过测试可以正常运行,是在WinForm窗体上来用鼠标画线的,按住鼠标就可以画出鼠标的轨迹。代码如下:
        //=================================华丽丽的分割线===============================
        //MyPoint1, MyPoint2表示鼠标按下和弹起时鼠标的坐标位置
        public Point MyPoint1, MyPoint2;
        public int MyFlag = 0;
    
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
          	//当鼠标弹起时,设置MyFlag = 0,表示不能画线
          	this.MyFlag = 0;
        }
    
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
          	this.Text = "X=" + e.X.ToString() + ",Y=" + e.Y.ToString();
          	Graphics g = this.CreateGraphics();
          	Pen MyPen = new Pen(Color.Black);
    
          	//MyFlag=0表示鼠标弹起,不能进行画线
          	//当鼠标按下时,设置MyFlag=1表示可以画线
          	if (this.MyFlag == 0)
            		return;
    
          	//鼠标移动,每次变换时,MyPoint2都记录下鼠标的位置,以便进行鼠标移动画线
          	this.MyPoint2.X = e.X;
          	this.MyPoint2.Y = e.Y;
          	g.DrawLine(MyPen, MyPoint1.X, MyPoint1.Y, MyPoint2.X, MyPoint2.Y);
    
          	//当画完一条线后(很短的,可以当做一个小点看待),将MyPoint1的坐标重置为此时鼠标的位置
          	MyPoint1.X = e.X;
          	MyPoint1.Y = e.Y;
        }
    
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
          	//鼠标第一次按下时,设置鼠标坐标为第一个点的坐标
          	this.MyFlag = 1;
          	this.MyPoint1.X = e.X;
          	this.MyPoint1.Y = e.Y;
        }
        //=================================华丽丽的分割线===============================
    


    这是出处:
    winform根据鼠标移动画线,这一个问题想了3年还不会

    Sincerely,
    Leo Liu

    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月22日 7:06
    版主

全部回复

  • dear
    你可以使用MouseDown + Mouse + MouseUp事件来达成你要的目的
    MouseDown 发生时时画下第一点
    Mouse 发生时记下移动的坐标,并画出
    MouseUp 发生时可把那些记下来的坐标连起来,看你自己的需求

    你可参考
    [[C#.NET][VB.NET] 程式執行時拖曳控制項]
    http://www.dotblogs.com.tw/yc421206/archive/2010/06/21/16039.aspx
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月16日 9:58
  • Hi 学者,

     

    欢迎使用MSDN社区论坛,期待您能在学习知识的同时为社区做出贡献,大家共同提高。J

    我会在短期内将有用的回复标记为答案,如果这些答案并没有解决您的问题,您可以“取消答复标记”。

     

    Sincerely,

    Leo Liu


    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月21日 6:26
    版主
  • Hi 学者,

    我找到了一个样例,经过测试可以正常运行,是在WinForm窗体上来用鼠标画线的,按住鼠标就可以画出鼠标的轨迹。代码如下:
        //=================================华丽丽的分割线===============================
        //MyPoint1, MyPoint2表示鼠标按下和弹起时鼠标的坐标位置
        public Point MyPoint1, MyPoint2;
        public int MyFlag = 0;
    
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
          	//当鼠标弹起时,设置MyFlag = 0,表示不能画线
          	this.MyFlag = 0;
        }
    
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
          	this.Text = "X=" + e.X.ToString() + ",Y=" + e.Y.ToString();
          	Graphics g = this.CreateGraphics();
          	Pen MyPen = new Pen(Color.Black);
    
          	//MyFlag=0表示鼠标弹起,不能进行画线
          	//当鼠标按下时,设置MyFlag=1表示可以画线
          	if (this.MyFlag == 0)
            		return;
    
          	//鼠标移动,每次变换时,MyPoint2都记录下鼠标的位置,以便进行鼠标移动画线
          	this.MyPoint2.X = e.X;
          	this.MyPoint2.Y = e.Y;
          	g.DrawLine(MyPen, MyPoint1.X, MyPoint1.Y, MyPoint2.X, MyPoint2.Y);
    
          	//当画完一条线后(很短的,可以当做一个小点看待),将MyPoint1的坐标重置为此时鼠标的位置
          	MyPoint1.X = e.X;
          	MyPoint1.Y = e.Y;
        }
    
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
          	//鼠标第一次按下时,设置鼠标坐标为第一个点的坐标
          	this.MyFlag = 1;
          	this.MyPoint1.X = e.X;
          	this.MyPoint1.Y = e.Y;
        }
        //=================================华丽丽的分割线===============================
    


    这是出处:
    winform根据鼠标移动画线,这一个问题想了3年还不会

    Sincerely,
    Leo Liu

    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月22日 7:06
    版主
  • 感谢!

    2010年12月25日 9:00