-2

我正在尝试制作彩色玻璃窗。我选择 8 种颜色添加到每个要绘制的矩形和线条上。将随机选择颜色以填充每个模拟的矩形/线条。

Dim cbColorsInit As New List(Of Color) With {Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Black, Color.White, Color.Cyan, Color.Magenta}

Dim cbControls As New List(Of CheckBox)

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

    addRed(CheckBox1)
    addGreen(CheckBox2)
    addBlue(CheckBox3)
    addYellow(CheckBox4)
    addBlack(CheckBox5)
    addWhite(CheckBox6)
    addCyan(CheckBox7)
    addMagenta(CheckBox8)
End Sub

Private Sub addRed(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addGreen(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addBlue(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addYellow(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addBlack(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addWhite(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addCyan(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub
Private Sub addMagenta(ByVal cb As CheckBox)
    cbControls.Add(cb)

    cbControls(cbControls.Count - 1).Tag = cbControls.Count - 1
End Sub

Dim ran As New Random
Private Function GetRandomColor() As Color

    Dim chkd As List(Of CheckBox) = cbControls.Where(Function(c) c.Checked).ToList
    Dim rv As Color
    If chkd.Count > 0 Then
        Dim rndnum As Integer = ran.Next(chkd(rndnum).Tag)
        rv = cbColorsInit()
    Else
        Stop
    End If
    Return rv
End Function

这就是我在上面的图像中编码的方式,希望我能就我的问题提供足够的信息。我真的不明白为什么我不断收到错误。

4

2 回答 2

0

相当混乱......试试这个:

Dim ran As New Random
Dim cbControls As New List(Of CheckBox)

Dim cbColorsInit As New List(Of Color)(New Color() {Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Black, Color.White, Color.Cyan, Color.Magenta})

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    addCB(CheckBox1)
    addCB(CheckBox2)
    addCB(CheckBox3)
    addCB(CheckBox4)
    addCB(CheckBox5)
    addCB(CheckBox6)
    addCB(CheckBox7)
    addCB(CheckBox8)
End Sub

Private Sub addCB(ByVal cb As CheckBox)
    cbControls.Add(cb)
    cb.Tag = cbControls.Count - 1
End Sub

Private Function GetRandomColor() As Color
    Dim chkd As List(Of CheckBox) = cbControls.Where(Function(c) c.Checked).ToList
    Dim rv As Color
    If chkd.Count > 0 Then
        Dim rndnum As Integer = ran.Next(chkd.Count)
        rv = cbColorsInit(chkd(rndnum).Tag)
    Else
        Stop
    End If
    Return rv
End Function
于 2013-11-13T08:52:21.300 回答
0

您似乎正在List(Of Color)错误地初始化您的。尝试这个:

Dim cbColorsInit As New List(Of Color) From {
    Color.Red, 
    Color.Green, 
    Color.Blue, 
    Color.Yellow, 
    Color.Black, 
    Color.White, 
    Color.Cyan, 
    Color.Magenta
}

这里 查看更多信息。

于 2013-11-13T09:08:40.860 回答