2012-03-21 59 views
0

背景:我是一位Web開發人員,希望通過一些修補桌面應用程序來擴展我的技能。這只是爲了好玩。.NET並允許拖放預定義的形狀

我正在嘗試構建一些最小化的Visio界面。

在學校時,我做了一點點.NET,所以我對Winforms和GDI很熟悉。我知道我可以很容易地在屏幕上畫畫並在上面寫字。

我現在正在尋找更多的方式讓我的用戶添加「形狀」到畫布。想想Visio如何用流程圖的形式做到這一點,你選擇你想要的形狀,你可以放下它並調整它(寬度,高度等)。

我可以用像矩形這樣簡單的GDI形狀來做到這一點,但是在設計各種形狀時會失去什麼。

我可以再次想到的最接近的例子是,這是否是Visio,您可以在其中選擇數據輸入的平行四邊形將其放在畫布上並根據需要進行調整。

我已經看了什麼到迄今爲止最小的成功包括:

  • 自定義形狀;
  • 自定義控件;
  • 在運行時啓用表單設計器;
  • 基於矢量的形狀。

任何指針,我應該找什麼?

+1

你從Winforms獲得幫助很少。控件是窗口,它們是矩形的。也沒有簡單的方法來將控件與一條線連接起來。你可以在表單的OnPaint()方法中用e.Graphics完成所有工作,但這是你自己的代碼。 WPF可以更有幫助,它不使用Windows。它的Shape類來自UIElement。 – 2012-03-21 02:29:45

回答

1

接近它的最好方法是擁有用戶控件。創建一個名爲Shape的基本用戶控件。然後,對於您想要的每個形狀(例如線形),創建一個名爲LineShape的類,該類來自Shape。此外,您可能還需要創建一個名爲IShape的接口。讓每個形狀類都實現這個接口。接口應該包含所有形狀都需要的方法。例如,您需要在稱爲EndPoints()的接口中放置一個方法,該方法定義用戶可以拖動以調整形狀大小的端點。由於每個形狀都將從基本用戶控件派生而來,因此它們將具有拖放功能。

在每個形狀中,您都希望在繪製方法中繪製形狀。在繪製方法中,您可以獲得Graphics對象的句柄並執行繪圖線,圓或多邊形等原始操作。

你的「畫布」也應該是一個用戶控件。您將需要定義一個List<IShape>列表來容納拖放到畫布上的每個形狀控件。

對於你的拖放,你只需要在Shape控件上啓用它,它將繼承所有其他形狀。在拖動到畫布上時,您需要確保被拖動的數據的類型爲IShape,如果是,請致電DoDragDrop(),以便用戶將圖形拖放到畫布上。

如果您需要幫助,請閱讀InterfacesUser Controls

永遠記住,試圖以編程的接口,如果你做的不夠好,你甚至可以讓你的程序支持插件,以便其他開發人員可以編寫一個看似與您的應用程序集成的自定義形狀。

+0

謝謝,假期,下週應該是很多更有趣,現在我至少有一個線索在哪裏尋找這個有趣的小自我學習實驗;) – jfrobishow 2012-03-22 01:07:07