2012-02-16 49 views
1

我有一個很多LineShapes的形式,基本上我想要做的是使某些線條變成藍色,而其他線條變成黑色,這取決於它在整數數組。每行被稱爲line1,line2等。因此,如果數組中的某個值爲3,那麼line3將被標記爲藍色。VB.Net - 整理一些代碼

我有下面的代碼來處理所有的線條更容易:

 MeterArray = New PowerPacks.LineShape() {line1, line2, line3, line4, line5} 

然而,因爲我將有大約50名獨立的線路,這將顯得相當凌亂,當我到達line50。所以我的問題是,處理這些線型有沒有更好的方法。

在此先感謝!

回答

3

而不是在窗體設計器手動添加的線條,考慮編程將它們添加

Const N As Integer = 50 

Dim _lines(N - 1) As LineShape 
Dim _numbers(N - 1) As Integer 

Private Sub frmLineShapes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    'TODO: Fill the _numbers array with values. 

    For i As Integer = 0 To N - 1 
     _lines(i) = New LineShape With { _ 
      .X1 = 5 * i + 10, .Y1 = 20, _ 
      .X2 = 5 * i + 10, .Y2 = 60, _ 
      .BorderColor = DirectCast(IIf(_numbers(i) = 3, Color.Blue, Color.Black), Color) _ 
     } 
    Next 
    Me.SuspendLayout() 
    Me.ShapeContainer1.Shapes.AddRange(_lines) 
    Me.ResumeLayout() 
End Sub 

現在,您已經擁有數組中的行,並且可以輕鬆訪問並更改它們。


注:

在Visual Basic的PowerPack的形狀並不直接添加到形式;相反,它們被添加到形狀容器。您必須在窗體設計器中爲窗體添加至少一個形狀,以便VB自動將形狀容器添加到窗體。如果沒有,你仍然可以通過編程來添加它。

Me.SuspendLayout() 
Dim ShapeContainer1 = New ShapeContainer 
Me.Controls.Add(ShapeContainer1) 
ShapeContainer1.Shapes.AddRange(_lines) 
Me.ResumeLayout() 

UPDATE

如果手動添加這些行,你仍然可以通過他們的名字

For i As Integer = 0 To N - 1 
    Dim index As Integer = Me.ShapeContainer1.Shapes.IndexOfKey("LineShape" & (i + 1)) 
    Dim line As LineShape = DirectCast(Me.ShapeContainer1.Shapes(index), LineShape) 
    If _numbers(i) = 3 Then 
     line.BorderColor = Color.Blue 
    Else 
     line.BorderColor = Color.Black 
    End If 
Next 
+0

我添加了一個例子,它顯示瞭如何將線接入線可以通過他們的名字進行訪問。 – 2012-02-17 14:10:06

2

如果你只是想作出聲明看起來不錯,你可以使用下劃線(_)繼續對下一行:

MeterArray = New PowerPacks.LineShape() {line1, line2, line3, line4, line5, _ 
             line6, line7, line8, line9, line10} 

...你可以在該模式一直繼續到50的方式。

這將需要10行代碼,但我認爲這是比一個真正的長線更整潔看。

1

我認爲50行是一種顏色的陰影?這將大大黑色white..It也將是更易於維護是一個循環(比如你現在要150線?)

 Dim colours as new List(of PowerPacks.LineShape) 
     Dim colourStep As Integer = 255 \ NumberOfSubLevels 

     For nextStep As Integer = 1 To NumberOfSubLevels 
      colours.Add(New PowerPacks.LineShape(colourStep * nextStep) 
     Next