一个工控软件,要求在一个建筑的平面图上直接进行操作。这个平面图上分布了一些设备。
在鼠标移动到这些设备上时,显示相关信息。点击设备时,弹出操作菜单。目前的方案:
有一个设备列表,这个列表保存着设备的图元ID,座标,图元的宽和高。
首先用picturebox装载建筑的平面图,然后根据上面所说的设备列表把设备的图一一绘制到平面图上。现在不知如果检测鼠标是否移到了设备的图元上。
设想的方案是:
在picturebox 的mousemove事件中用鼠标的当前点一一去比对上述的设备列表的座标。这样效率太低了,设备多的时候比较卡,不知大家有没有更好的方法?有代码更好了,谢谢!

解决方案 »

  1.   

    你在每次返回鼠标坐标后,Sleep 一小段时间试一下
      

  2.   

    一个设备使用一个picturebox,移动鼠标时,picturebox会响应mousemove事件,就会知道是哪个设备,不必比对鼠标坐标
      

  3.   


    你好,我是在picturebox的mousemove事件里捕捉鼠标座标,如果sleep的话,会更卡吧。你好。因为软件要考虑通用性,新的环境下,不用重新编写程序。加上客户可能日后会安装新的设备和在新环境下使用,要提供绘制平面图的功能,所以这个方法不太方便。
      

  4.   

    使用mousemove事件里捕捉鼠标座标的方法,虽然直观但计算量大,还是不用为好。建议还是使用picturebox会响应mousemove事件的方法,这个picturebox可以根据图元的数量动态创建。可以自定义一个类,里面包含picturebox、图元ID、设备信息等,这样通用性会更强。
      

  5.   


    不知WINDOWS底层是如何实现这个的。在一个面板上放上几百个按钮,也不会很卡。
      

  6.   

    就用我这个方法,不过更正一下,picturebox控件响应MouseEnter事件,只有鼠标第一次进入控件时触发,否则不触发,也不用随时计算鼠标坐标