小弟在Form1上随机画了10个点,每个点的颜色是不同的,当我鼠标按下的时候,最接近我鼠标按下的点,向鼠标点移动,但是我怎么去获取离鼠标点最近点的坐标,还有我切换一下窗口,Form上的点就没了,不知道该怎么解决?1.我怎么获得离鼠标按下点最接近的点的坐标??
2.Form切换后,Form上的点为什么没了,要怎么样做才可以使Form切换后和没切换前保持一样????????

解决方案 »

  1.   

    你可以用一个数组来记录你的点的坐标 ,然后在鼠标按下的事件里循环这个数组找到和鼠标点最近的点然后把这个点的坐标设置为鼠标的点再绘出来就可以了.你可以在OnPaint这个事件上加入对你的数组中的所有点进行绘制的代码,这样的话当你的窗体被其它的窗体覆盖的时候或切换的时候就会正常的显示出来了.
      

  2.   

    在对图像的绘制的时候,在mousedown/mouseup的时候只记录这些数据的内容。在onpaint中进行绘制。另外,如果要主动触发,需要自己写this.invalidate()。对于鼠标位置,可以用数据记录。至于怎么判断,应该是(X1 - X)^2 + (Y1 - Y)^2 最小把。
      

  3.   

    谢谢,楼上的2位高手,请问一下OnPaint()这个方法在哪,我只找到Paint()这个方法
      

  4.   

    OnPaint是Control的方法,可以重写,比如在Form上可以重写如下,并输出一个字符串:
    protected override void OnPaint(PaintEventArgs e)
    {
    base.OnPaint(e);
    e.Graphics.DrawString("aaaa", this.Font, SystemBrushes.ControlText, 0, 0);
    }