我知道我可以将事件处理程序添加到按钮,标签和文本框中,如下所示:
AddHandler button1.click , AddressOf Subbutton1_click
我实际上可以使用Form Paint事件中的图形绘制圆形,椭圆形,矩形或其他图形:
e.Graphics.DrawEllipse(pen1, 0.0F, 0.0F, 200.0F, 200.0F)
这样可行,但是如何为我刚刚绘制的图形添加事件处理程序?
任何帮助将不胜感激。
提前致谢
答案 0 :(得分:2)
您可以让一个活动举起另一个活动。让我们从使用GraphicsPath存储形状并绘制它的基本表单开始:
Imports System.Drawing.Drawing2D
Public Class Form1
Private Shape As GraphicsPath
Public Sub New()
InitializeComponent()
Shape = New GraphicsPath()
Shape.AddEllipse(0, 0, 200.0F, 200.0F)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
e.Graphics.DrawPath(Pens.Black, Shape)
MyBase.OnPaint(e)
End Sub
End Class
现在您要添加一个事件,以便其他一些类可以看到被点击的形状:
Public Event ShapeClick As EventHandler
您编写了一个受保护的虚拟方法来引发事件,这是标准.NET事件引发模式的一部分:
Protected Overridable Sub OnShapeClick(ByVal e As EventArgs)
'--- Note: you can write code here to respond to the click
RaiseEvent ShapeClick(Me, e)
End Sub
您需要注意用户点击表单。如果是这种情况,您将检查是否单击了形状并引发了事件:
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
If Shape.IsVisible(e.Location) Then OnShapeClick(EventArgs.Empty)
MyBase.OnMouseUp(e)
End Sub
答案 1 :(得分:0)
您可以截取窗口或视图(等等......,我不知道您使用的是什么)点击事件,因此每次您点击某个地方都会调用该功能。
然后在该点击事件中检查它是否在您的自定义绘制元素中。您需要先保存元素属性,然后使用大量资源来遍历所有元素。
我不知道你的情况是否可以接受以及你实际想要完成的事情。