继承control的自定义控件,如何设置不同区域的鼠标点击事件?

ljupin 2017-03-26 09:33:27
有个要求,需要继承control,然后重写OnPaint方法,最后画出来的界面大概如下

-------------------------------
文字点击1
文字点击2
文字点击3
-------------------------------


如上,如何确定鼠标点击控件后,具体点击的哪段文字?好触发不同的事件

这个控件内部如何计算出内部点击坐标?
...全文
186 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_lz 2017-03-28
  • 打赏
  • 举报
回复
难道 你连一个Rectangle都没有吗? override OnClick: if(Rect1.Contains(mousepoint))// mousepoint => OnMouseMove ... http://st233.com/blog.php?id=4
ljupin 2017-03-28
  • 打赏
  • 举报
回复
自己解决了,其实蛮简答
john_QQ:2335298917 2017-03-26
  • 打赏
  • 举报
回复
你得不到文字所被包围的矩形坐标吗?
水哥阿乐 2017-03-26
  • 打赏
  • 举报
回复
建议尽量采用3个控件的组合,也不是说一个控件不能实现,但程序复杂性的确会增加.其1判断坐标,如果窗体拉伸和控件被无规则拉伸坐标发生了变化呢?了呢?其2几个鼠标的事件你都要依次审视一下.但是还是能实现的.只是相对来说. 用3个控件组合来说就简单多了,点了那个控件触发那个控件的事件.
ljupin 2017-03-26
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你的这个控件应该是组合了3个控件,而不是它自己 paint。
页面会加载几千个该控件,使用复合控件,程序会崩溃,还有其他办法吗,显示逻辑就这么要求,客户那不好更改
ljupin 2017-03-26
  • 打赏
  • 举报
回复
引用 1 楼 Forty2 的回复:
你可以用数据结构入手。 你OnPaint的时候,需要把【文字点击1】画在某个区域。 记录这个区域,鼠标点击时,就可以利用这些区域数据,来判断点击在什么上面。
记录了,不过位置是相对该控件内部,关键是不好计算,鼠标是否移动到此区域
  • 打赏
  • 举报
回复
你的这个控件应该是组合了3个控件,而不是它自己 paint。
Forty2 2017-03-26
  • 打赏
  • 举报
回复
你可以用数据结构入手。 你OnPaint的时候,需要把【文字点击1】画在某个区域。 记录这个区域,鼠标点击时,就可以利用这些区域数据,来判断点击在什么上面。
xuzuning 2017-03-26
  • 打赏
  • 举报
回复
控件的 Location 不就是控件相对窗体的坐标吗?
ljupin 2017-03-26
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
页面? 是在做网页? 不是有 area 标记吗? 如果是做桌面程序,那么可以在 GraphicsPath 写文字 GraphicsPath 提供有相应的方法,用以检查点是否在路径中
如何获取该控件,在主窗体中的相对坐标?
ljupin 2017-03-26
  • 打赏
  • 举报
回复
引用 5 楼 wtuqi 的回复:
建议尽量采用3个控件的组合,也不是说一个控件不能实现,但程序复杂性的确会增加.其1判断坐标,如果窗体拉伸和控件被无规则拉伸坐标发生了变化呢?了呢?其2几个鼠标的事件你都要依次审视一下.但是还是能实现的.只是相对来说. 用3个控件组合来说就简单多了,点了那个控件触发那个控件的事件.
目前的控件就是继承自usercontrol的组合控件,包含10多个控件,但实际应用用,界面中加载了几千个该控件后,软件会弹出找不到句柄,进而崩溃,所以想着直接继承control画这个控件,所以这样一来,控件内部各部分点击事件就不好写了,我感觉能实现,就是特费劲,也可能有不可预料的问题
xuzuning 2017-03-26
  • 打赏
  • 举报
回复
页面? 是在做网页? 不是有 area 标记吗? 如果是做桌面程序,那么可以在 GraphicsPath 写文字 GraphicsPath 提供有相应的方法,用以检查点是否在路径中

110,538

社区成员

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

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

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