VB十六进制颜色代码

10

我想要做这件事:

    Const COLOR_GREEN = &H00FF00
    Me.Label1.BackColor = COLOR_GREEN

然而存在一个问题,即vb会自动将 &H00FF00 转换为 &HFF00,因此我得到的结果是这样的:

    Const COLOR_GREEN = &HFF00
    Me.Label1.BackColor = COLOR_GREEN

COLOR_GREEN的十进制值现在是-256,而不是65280,因此背景是黑色而不是绿色!这很烦人,因为我可以在表单设计模式下使用#00FF00完全设置颜色。

在VB中,在表单设计模式下设置颜色为#00FF00的等效方法是什么?

3个回答

25

你尝试过使用字面值&H0000FF00&吗?下面的代码对我来说完全正常:

Const COLOR_GREEN = &H0000FF00&
Me.Label1.BackColor = COLOR_GREEN

当然,VB 6会自动将其折叠为这个值,因为这两个值在数值上是完全等价的:

Const COLOR_GREEN = &HFF00&
Me.Label1.BackColor = COLOR_GREEN
诀窍在于需要将该值声明为Long,而不是Integer在数值文字之后加上“&”可以实现这一点。
这也解释了为什么您看到的值是-256,而不是您预期的65280。65280的值过大,无法容纳在Integer中,在它溢出该数据类型时,VB 6会将其再次环绕,产生-256。
值得注意的是,VB 6中的十六进制文字不等同于您可能从web和HTML编程中熟悉的文字。 VB 6使用BBGGRR表示法,或&H00BBGGRR&,与本机Win32 COLORREF结构相同,其中低位字节为红色,而不是蓝色。
当然,对于像这里展示的标准颜色值,您最好使用VB文字,例如vbGreen

Me.Label1.BackColor = vbGreen

是的,这确实适用于绿色。我刚刚发现 Const COLOR_GREEN = "&HFF00" 也可以工作!但是对于应该生成黄色的 FFF200,vb 不允许使用 &HFFF200& 因为它会丢弃最后一个 &,从而生成颜色青色而不是黄色的 &HFF200 - David
1
@David:是的,那是完全不同的问题。尝试使用RGB()函数,它接受与红、绿和蓝色分量值相对应的整数值。因此,例如,以下代码将为您获取与&HFFFF20相同的黄色:Me.Label1.BackColor = RGB(255, 255, 32) - Cody Gray
1
我刚刚发现了整个RGB vs BGR问题!这解释了一切。 - David
2
@David:如果你需要一个编译时常量,那么使用什么符号都无所谓。只需将十六进制符号转换为 VB 用于颜色的标准“Long”符号即可。但是,“完全不同”的问题似乎是你正在使用&H00RRGGBB&符号,而不是&H00BBGGRR&符号。VB 6 不同于 HTML。(编辑:啊,是的,我刚刚发布了这个。确实如此。) - Cody Gray
2
@David:VB6不允许使用&FFF200&,因为它会将最后一个&丢弃,从而得到“&HFFF200”。但请注意前导的“FFF”。VB6意识到这个数字太大了,无法适应16位int类型,并将其提升为32位long类型。你始终可以使用Const COLOR_GREEN As Long = &H00FF00&来显示你需要一个long类型的意图。 - quamrana

5

在VB的十六进制表示中,无法保留前导零。数值文字(包括&H*)默认为16位整数,如果要使用32位常量文字则需使用后缀&以显示声明其为长整型。

Const COLOR_GREEN = &HFF00&

?COLOR_GREEN
 65280 

1
你可以使用 Colortranslator。
             dim myColor as new  Color
               myColor=ColorTranslator.fromHTML("#ff0000") 'Red color

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接