我有一个包含很多LineShapes的表单,基本上我正在尝试做的是使某些行为蓝色而其他行为黑色,这取决于它在整数数组中的含义。每一行称为line1,line2等。因此,如果数组中的一个值为3,则line3将显示为蓝色。
我有以下代码可以更轻松地处理所有行:
MeterArray = New PowerPacks.LineShape() {line1, line2, line3, line4, line5}
然而,由于我将有大约50个单独的线路,当我到达line50时,这看起来会非常混乱。所以我的问题是,是否有一种处理这些线形的整洁方式。
提前致谢!
答案 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