2012-12-11 85 views
1

我有一個PictureBox,有一個平面圖。在picturebox上畫多個多邊形

在那個形象,我想繪製多邊形,我可以用下面的代碼:

Private points As New List(Of Point) 

Private Sub FlorPlan_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FlorPlan.MouseDown 

points.Add(e.Location) 
FlorPlan.Invalidate(New Rectangle(e.X, e.Y, 5, 5)) 
End Sub 

Private Sub FlorPlan_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles FlorPlan.Paint 
    For Each p As Point In points 
     e.Graphics.FillRectangle(Brushes.Red, p.X, p.Y, 5, 5) 
    Next 
End Sub 

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim myPen As Pen 
    myPen = New Pen(Drawing.Color.Red, 2) 

    Dim myGraphics As Graphics = PictureBox.CreateGraphics 
    myGraphics.DrawPolygon(myPen, points.ToArray) 
    'myGraphics.FillPolygon(Brushes.Red, points.ToArray) 
    myGraphics.Dispose() 
End Sub 

我想這樣做是爲了獲得該對象的持有,這樣我以後可以改變背景顏色等。

我該如何繼續?

+2

您需要跟蹤某個自定義類的對象列表中每個圖形對象的所有屬性,否則需要將每個對象顯示爲新控件,並讓每個控件都保留所有這些屬性。每次需要另一個圖形對象時,都可以動態實例化一個新控件。 –

+0

@StevenDoggart 我應該如何動態實例化一個新的控制器? 我試圖創建一個新的圖片框,然後將圖片放入其中,並將新的圖片框添加到現有的圖片框中。 就是這樣嗎? –

回答

0

他們是兩個方面,這通常會做:

  • 在一些自定義類的列表中的所有的圖形對象的手動跟蹤。
  • 動態加載每個圖形對象的新控件。

如果您選擇做後者,我建議您自己創建UserControl,其中包含有關每個圖形對象的所有必要數據,例如多邊形中的點。要動態加載它們,你可以做這樣的事情:

Private Sub AddGraphicalObject(properties As GraphicalObjectProperties) 
    Dim control As New GraphicalObjectControl() 
    control.Properties = properties 
    ' set position and size 
    Panel1.Controls.Add(control) 
End Sub 

你可能會想一些事件處理程序添加到一些事件上的控制也爲你添加。

+0

如何創建一個新的控件,用於存儲該類型的信息? –

+0

右鍵單擊您的項目,然後在上下文菜單中選擇將新項目添加到項目。在對話窗口中,選擇你想要它作爲用戶控件。有關更多信息,請在網上搜索 - 我確定其他網站上有一些很棒的教程。如果您只需要一個圖片框,則可以將圖片框控件拖放到設計器中的用戶控件中,然後將其設置爲填充屬性。 –