Vb.net 前景色总是采用白色

Vb.net 前景色总是采用白色,vb.net,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() 菜单似乎总是变黑,我

我正在使用一个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
第一部分将更改菜单的背景色,第二部分将更改为前景色。 这可能是什么原因造成的?我还想从白色中排除,否则文本采用表单的颜色,用户无法看到菜单上写的内容。

问题在于:

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是非常深的蓝色,所以它看起来也可能是黑色的

您的“随机”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))
此外,你可能会发现我在这篇文章中的答案很有用:


一种可能的修复方法:自定义菜单。切换主题(自定义菜单。背景颜色。黑色,颜色。FromArgb(Int(Rnd()*255),Int(Rnd()*255),Int(Rnd()*255))),但我只想生成13种颜色。如果只需要13种颜色,则将它们写入数组(固定值或启动时随机生成),然后从该数组中选择随机值。