2012-02-16 96 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