首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标签背景颜色混合

标签背景颜色混合
EN

Stack Overflow用户
提问于 2019-12-30 18:52:33
回答 1查看 118关注 0票数 0

我有三个标签和一个按钮。我想随机化label1和label2的背景颜色,条件是label1和label2的颜色不同,点击一个按钮,我想得到label3背景颜色,这是label1颜色和label2颜色之间的混合颜色。在我的代码中,我有带有一些颜色的colorlist。我想对我的颜色列表中包含的颜色进行随机化,谢谢您的帮助

代码语言:javascript
复制
 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
EN

Stack Overflow用户

回答已采纳

发布于 2019-12-31 06:58:10

您不应该每次单击时都创建一个新的Random类。只需创建一个类级变量即可。混合颜色取颜色的每个分量(R、G、B)并取平均值。然后根据平均值创建新的颜色。剩下的就不言自明了。

你只需要一个列表(颜色)

代码语言:javascript
复制
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
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59529603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档