2013-04-17 60 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 
相關問題