添加事件处理程序到绘制的图形图

时间:2013-04-17 21:25:02

标签: vb.net winforms graphics

我知道我可以将事件处理程序添加到按钮,标签和文本框中,如下所示:

AddHandler button1.click , AddressOf Subbutton1_click

我实际上可以使用Form Paint事件中的图形绘制圆形,椭圆形,矩形或其他图形:

e.Graphics.DrawEllipse(pen1, 0.0F, 0.0F, 200.0F, 200.0F)

这样可行,但是如何为我刚刚绘制的图形添加事件处理程序?

任何帮助将不胜感激。

提前致谢

2 个答案:

答案 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)

您可以截取窗口或视图(等等......,我不知道您使用的是什么)点击事件,因此每次您点击某个地方都会调用该功能。

然后在该点击事件中检查它是否在您的自定义绘制元素中。您需要先保存元素属性,然后使用大量资源来遍历所有元素。

我不知道你的情况是否可以接受以及你实际想要完成的事情。