我有三个标签和一个按钮。我想将label1和label2的背景颜色随机化,条件是label1和label2的颜色不相同,并且单击按钮,我想获得label3背景色,它是label1颜色和label2颜色。 在我的代码中,我有一些颜色的颜色列表。 我想随机化仅包含在我的颜色列表中的颜色 谢谢您的帮助
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' Create a List
Dim colorList As New List(Of SolidBrush)
' Add colors to it
'red
colorList.Add(New SolidBrush(Color.FromArgb(100, 255, 0, 0)))
'white
colorList.Add(New SolidBrush(Color.FromArgb(100, 255, 255, 255)))
'Blue
colorList.Add(New SolidBrush(Color.FromArgb(100, 0, 0, 255)))
'Yellow
colorList.Add(New SolidBrush(Color.FromArgb(100, 244, 255, 16)))
'Green
colorList.Add(New SolidBrush(Color.FromArgb(100, 0, 255, 0)))
'Pink
colorList.Add(New SolidBrush(Color.FromArgb(100, 255, 16, 22)))
'Brown
colorList.Add(New SolidBrush(Color.FromArgb(100, 120, 37, 37)))
Dim rnd = New Random()
' Get a random item from the list between 0 and list count
Dim randomColour = colorList(rnd.Next(0, colorList.Count))
Dim randomColour1 = colorList(rnd.Next(0, colorList.Count))
' Assign the color to the label
Label1.BackColor = randomColour.Color
Label1.Text = randomColour.Color.Name.ToString
Label2.BackColor = randomColour1.Color
Label3.BackColor = (Color.FromArgb(Label1.BackColor.ToArgb + Label2.BackColor.ToArgb))
End Sub
答案 0 :(得分:1)
您不应每次单击都创建一个新的Random类。只需创建一个类级别的变量即可。 混合颜色将获取颜色的每个分量(R,G,B)并取平均值。然后根据平均值创建新的颜色。 其余的很容易说明。
您只需要一个颜色列表
Private rnd As New Random()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim colorList As New List(Of Color)
' Add colors to it
'red
colorList.Add(Color.FromArgb(255, 0, 0))
'white
colorList.Add(Color.FromArgb(255, 255, 255))
'Blue
colorList.Add(Color.FromArgb(0, 0, 255))
'Yellow
colorList.Add(Color.FromArgb(244, 255, 16))
'Green
colorList.Add(Color.FromArgb(0, 255, 0))
'Pink
colorList.Add(Color.FromArgb(255, 16, 22))
'Brown
colorList.Add(Color.FromArgb(120, 37, 37))
' Get a random item from the list between 0 and list count
Dim randomColour = colorList(rnd.Next(0, colorList.Count))
Dim randomColour1 = colorList(rnd.Next(0, colorList.Count))
' Get the name of the color to display in the label
Dim ColorName1 As String = GetColorName(randomColour.Name)
Dim ColorName2 As String = GetColorName(randomColour1.Name)
'Set the text color depending on the back color
If ColorName1 = "White" OrElse ColorName1 = "Yellow" Then
Label1.ForeColor = Color.Black
Else
Label1.ForeColor = Color.White
End If
If ColorName2 = "White" OrElse ColorName2 = "Yellow" Then
Label2.ForeColor = Color.Black
Else
Label2.ForeColor = Color.White
End If
'Set the back color and text of the labels.
Label1.BackColor = randomColour
Label1.Text = ColorName1
Label2.BackColor = randomColour1
Label2.Text = ColorName2
Label3.BackColor = MixColors(randomColour, randomColour1)
End Sub
Private Function MixColors(Color1 As Color, Color2 As Color) As Color
Dim r As Byte = CByte((Color1.R * 0.5) + (Color2.R * 0.5))
Dim g As Byte = CByte((Color1.G * 0.5) + (Color2.G * 0.5))
Dim b As Byte = CByte((Color1.B * 0.5) + (Color2.B * 0.5))
Return Color.FromArgb(r, g, b)
End Function
Private Function GetColorName(name As String) As String
Select Case name
Case "ffff0000"
Return "Red"
Case "ffffffff"
Return "White"
Case "ff0000ff"
Return "Blue"
Case "fff4ff10"
Return "Yellow"
Case "ff00ff00"
Return "Green"
Case "ffff1016"
Return "Pink"
Case "ff782525"
Return "Brown"
Case Else
Return "No match"
End Select
End Function