2013-01-24 25 views
0

我有一個Windows窗體應用程序。 在此應用中我得出一些圈子,所以我有自定義類名爲「圓」 是知道要畫自己(在這個類中有一個方法公共無效抽獎(圖形G)將鼠標處理程序添加到c上的自定義對象類中#

現在時形式加載,我得出了一些圈子裏,我想讓用戶可以 能夠拖動圓..

所以我的問題是如何將mouseHandler添加到自定義類? 我以爲這個類應該有它自己的mouseHandler,但我不明白 如何做到這一點..

+0

你的圈子類必須訂閱鼠標事件。 –

+0

因此,mouseEvent應該在表單代碼上,並且當我創建新的「circle」時,我需要向他發送mouseEvent? – Elior

回答

1

讓你的Circle對象直接處理鼠標事件需要它派生自Control類。這將是一個很大的錯誤,控制類有幾個不良的屬性,使它不適合形狀塗鴉。從它是一個矩形窗口開始,並不能很好地支持重疊。這些東西是可以修復的,但是這是相當痛苦的,它只會給昂貴的課程增加昂貴的開銷。

反而讓它只是一個類。用方法bool HitTest(Point pos)。和一種方法void Move(Size dist)。並創建另一個名爲ShapeCollection的類來存儲一組形狀。還有一個Paint和一個HitTest方法,它們只是迭代形狀的集合。

您現在可以輕鬆地實現窗體的Paint事件,調用ShapeCollection.Paint方法。您可以實現MouseDown事件,調用HitTest並記住返回true的形狀的索引。並且實現MouseMove事件,在選定的形狀上調用Move並調用Invalidate,以便形狀在新位置繪製自己。

在WPF中更容易,它沒有與Control類相同的問題,並且具有內置的形狀支持。

+0

非常感謝你的回答!這是我想過的實現..謝謝! 我不能使用WPF,因爲其中一個約束是使用windowsForms – Elior

+0

你能解釋一下HitTest方法嗎?爲什麼她需要將Point作爲參數? – Elior

+0

測試是否點擊了形狀。點是鼠標的位置。 –

相關問題