请问如何对运行时画出的图形(直线或椭圆等)进行事件处理? aha,我也在做呀...用自定义的用户控件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 hehe 用PictureBox了,可以用PictureBox.Image画图用PictureBox.Region设置外形与画的图案相同,而且可以响应mouse事件不过就是太慢了,再多几个的话,真的要疯了 再Form中加入一个鼠标的移动的事件,再判断鼠标位置了,可以试试 不会吧?我反正还没有遇到这样的问题,又不会重绘。怎么会这样?不过GDI+的效率是不怎么样。 在Form里先作两个按钮,在加入一个可以移动的panel或picturebox之类的东西,运行时移动panel或picurebox快一点按钮的字就显不出来了,停一停就好了,好像是刷新效率不好,要作好一点就要DirectX了 方案1:先用数组记录每一条线的位置(起始,结束),然后在mouse的事件中判断鼠标是在哪条线上。方案2:把它做成一个object,再给object加上各种事件。 系统本身不提供这种功能的,你只能通过处理mouse事件自己实现。可以用以下方法:1。替代实现。如_95421(王磊) 所说,每当你画完一个图形,就按这个图形的包围图形创建一控件。简单起见,你可按包围矩形(最想能包围图形的矩形,找到最高点,最低点,最左点,最右点即可)创建控件。建议使用定制控件,由控件记住自己的形状。2。直接处理。生成一class,代表每一个图形,由此class记住自己的形状。程序保留一数组。当鼠标移动时,调用每一对象的方法,检查鼠标在不在自己的范围内。当然,这种方法有些浪费CPU但也比较容易实现。为提高速度可把屏幕分成若干区域,建议区域列表,每一区域保存一数组,指向每一个存在此区域的图形,然后当鼠标再吃区域时再调用此区域每一对象的方法,校验鼠标是否在自己的区域内。3。采用一些图形学的知识,如我们打的游戏所做的。我也不会!!!!! 对每一个图形生成一个GraphicPath(或Region)对象,然后当鼠标移动时,对每一个对象使用IsVisible判断当前鼠标位置是否在路径内, 我原来实现过这样的功能,和colinfly(Colin)的方法2是一样的,当图形多的时候,移动MOUSE时很慢,后来我就不要这个功能了 你用GDI+画的图形,那有Handle啊,怎么可能直接通过它来触发事件呢?我是通过查找区域来出发事件的,也就是记下每个图形在容器上的区域位置,然后通过容器的MouseMove触发,只是需要判断区域罢了 CrystalReport 水晶报表动态查询显示图片问题,急! c#编程中继承类中重载和覆盖的问题。。。? 菜鸟请教下winform最大宽度问题 Visio的二次开发 接收邮件的一个算法问题 winform程序多线程上传文件问题,谢谢 时间问题? 求助,c# 怎么分割字符串啊“----” 用四个-分割 OA 项目外包 c#如何取消调试后对修改的自动保存? 如何在关闭当前form时进入另一个form? TreeView 中如何知道一个节点是否是Root节点?是否有子节点?
用PictureBox了,可以用PictureBox.Image画图
用PictureBox.Region设置外形与画的图案相同,
而且可以响应mouse事件不过就是太慢了,再多几个的话,真的要疯了
可以试试
不过GDI+的效率是不怎么样。
可以用以下方法:
1。替代实现。如_95421(王磊) 所说,每当你画完一个图形,就按这个图形的包围图形创建一控件。简单起见,你可按包围矩形(最想能包围图形的矩形,找到最高点,最低点,最左点,最右点即可)创建控件。建议使用定制控件,由控件记住自己的形状。
2。直接处理。生成一class,代表每一个图形,由此class记住自己的形状。程序保留一数组。当鼠标移动时,调用每一对象的方法,检查鼠标在不在自己的范围内。当然,这种方法有些浪费CPU但也比较容易实现。为提高速度可把屏幕分成若干区域,建议区域列表,每一区域保存一数组,指向每一个存在此区域的图形,然后当鼠标再吃区域时再调用此区域每一对象的方法,校验鼠标是否在自己的区域内。
3。采用一些图形学的知识,如我们打的游戏所做的。我也不会!!!!!
你用GDI+画的图形,那有Handle啊,怎么可能直接通过它来触发事件呢?
我是通过查找区域来出发事件的,也就是记下每个图形在容器上的区域位置,然后通过容器的MouseMove触发,只是需要判断区域罢了