2013-04-17 26 views
0

我知道我可以将事件处理程序添加到按钮,标签和文本框这样的:事件处理程序添加到图形图绘

AddHandler button1.click , AddressOf Subbutton1_click 

其实我可以画一个圆,椭圆,矩形或使用其中的图形另一个数字Form Paint事件:

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

这是有效的,但是如何为我刚才绘制的图形添加一个事件处理程序?

任何帮助将不胜感激。

在此先感谢

+1

该图形不是您实例化并可能引发事件的对象。它只是一个图形基元。你应该建立一个能够绘制自己并引发事件的用户控件。我怀疑这是否值得麻烦 – Steve

+0

我知道这不是一个实例。这就是为什么我想知道这是否有可能。无论如何,我想一个用户控件应该工作,我会试一试,谢谢 – luchosrock

回答

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 
相关问题