VB.Net - 整理一些代码

时间:2012-02-16 17:13:16

标签: vb.net

我有一个包含很多LineShapes的表单,基本上我正在尝试做的是使某些行为蓝色而其他行为黑色,这取决于它在整数数组中的含义。每一行称为line1,line2等。因此,如果数组中的一个值为3,则line3将显示为蓝色。

我有以下代码可以更轻松地处理所有行:

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

然而,由于我将有大约50个单独的线路,当我到达line50时,这看起来会非常混乱。所以我的问题是,是否有一种处理这些线形的整洁方式。

提前致谢!

3 个答案:

答案 0 :(得分: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 PowerPacks的形状不会直接添加到表单中;相反,它们被添加到形状容器中。您必须在表单设计器中为表单添加至少一个形状,以便自动向表单添加形状容器。如果没有,您仍然可以通过编程方式添加它。

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

<强>更新

如果手动添加行,您仍然可以按名称

访问这些行
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

答案 1 :(得分:2)

如果您只是想使声明看起来不错,可以使用下划线字符(_)继续下一行:

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

......你可以继续使用这种模式到50岁。

这将需要10行代码,但我认为这看起来比1个很长的行更整洁。

答案 2 :(得分:1)

我认为50行是一种颜色的阴影?这将是黑色到白色..它也将更容易维持成为一个循环(说你现在想要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