您可以让一个事件引发另一个事件。让我们开始与使用的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
该图形不是您实例化并可能引发事件的对象。它只是一个图形基元。你应该建立一个能够绘制自己并引发事件的用户控件。我怀疑这是否值得麻烦 – Steve
我知道这不是一个实例。这就是为什么我想知道这是否有可能。无论如何,我想一个用户控件应该工作,我会试一试,谢谢 – luchosrock