VB шестнадцатеричные цветовые коды - PullRequest
10 голосов
/ 22 июня 2011

Я хочу сделать это:

    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 ]

23 голосов
/ 22 июня 2011

Вы пробовали буквальное &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 не будут эквивалентны тем, с которыми вы, вероятно, знакомы по веб и HTML-программированию. Вместо обозначения RRGGBB, которое вы там найдете, VB 6 использует обозначение BBGGRR, или &H00BBGGRR&, то же самое, что и собственная структура Win32 COLORREF, где младший байт красный, а не синий.


Конечно, обратите внимание, что для стандартных значений цвета, таких как показанные здесь, вам, вероятно, лучше использовать литералы VB, такие как vbGreen:

Me.Label1.BackColor = vbGreen
5 голосов
/ 22 июня 2011

Вы не можете сохранить начальные нули в шестнадцатеричной записи vb. Числовые литералы (включая &H*) по умолчанию имеют 16-битные целые числа, для суффикса литерала 32-битной константы с & неявно указывается его long;

Const COLOR_GREEN = &HFF00&

?COLOR_GREEN
 65280 
1 голос
/ 15 сентября 2016

Вы можете использовать Colortranslator

             dim myColor as new  Color
               myColor=ColorTranslator.fromHTML("#ff0000") 'Red color
...