前景色总是带白色

时间:2014-11-09 10:10:38

标签: vb.net

我使用了一个MenuStrip,它关联了我制作的一个类,以获得与默认设计不同的设计。

我创建了这段代码,允许我生成随机颜色并更改菜单的前景:

Dim randNum As Int32 = New Random().Next(0, 13)
Custom_Menu.Switch_Theme(Custom_Menu.Background_Color.Light, Color.FromArgb(randNum))
Form1.MenuStrip1.Invalidate()

菜单似乎总是变黑,我不明白为什么。 这是允许你改变颜色的方法,在我的班级中构建:

Public Shared Sub Switch_Theme(Background As Background_Color, Foreground As Color)
    If Background = Background_Color.Black Then
        BgColor = Color.Black
        ItemColor = Color.White
    Else
        BgColor = Color.White
        ItemColor = Color.Black
    End If
    ItemSelect = Foreground
End Sub

第一部分将改变菜单的背景颜色,第二部分将改变前景色。 可能是什么导致了这个?我也想从颜色 - 白色中排除,否则文本采用表单的颜色,用户无法看到菜单上写的内容。

2 个答案:

答案 0 :(得分:0)

问题在于:

Dim randNum As Int32 = New Random().Next(0, 13)
Custom_Menu.Switch_Theme(Custom_Menu.Background_Color.Light, Color.FromArgb(randNum))

将0到12之间的随机颜色值传递给Color.FromArgb方法。 ARGB是32位色彩空间,因此您的颜色值为0x00000000至0x0000000C。 0x00000000是黑色,0x0000000C是非常深蓝色,因此它看起来也可能是黑色。

http://en.wikipedia.org/wiki/RGBA_color_space

答案 1 :(得分:0)

您的“随机”ARGB值始终介于0到12之间。您需要为每个频道生成一个随机数。

Static rnd As New Random()

Dim red As Integer = rnd.Next(0, 256)
Dim green As Integer = rnd.Next(0, 256)
Dim blue As Integer = rnd.Next(0, 256)

Custom_Menu.Switch_Theme(Custom_Menu.Background_Color.Light, Color.FromArgb(red, green, blue))

此外,您可能会在本文中找到我的答案:

Linearly interpolation and luminosity