vb.net - установить фоновый цвет формы программно из строковой переменной - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть строка, содержащая значение RGB, например, "224,224,224".Я пытаюсь использовать это значение, чтобы установить цвет фона формы, но его ошибка, и я не уверен, почему.

Я пытаюсь ...

 If Not this_dialog_backcolor = "" Then _
     new_dialog.BackColor = Color.FromArgb(this_dialog_backcolor)

Я получаю исключение

Элемент управления не поддерживает прозрачные цвета фона.

Я попытался изменить строку так, чтобы она содержала 4-е значение, поэтому она стала "255,224,224,224", и это также привело к ошибке, исключение, что арифметическая операция привела к перегрузке.

Я также попытался отформатировать строку следующим образом:

 Color [A=255, R=33, G=33, B=33]

На этот раз я получил исключение «Преобразование из строки» Цвет [A = 255, R = 33, G = 33,B = 33] 'для ввода целого числа недопустимо.

Любая помощь оценена.

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

FromArgb - это метод, который не принимает строку в качестве параметра.Таким образом, здесь происходит автоматическое преобразование, и вы не можете быть уверены, что это преобразование сделает то, что вам нужно.
Если бы у вас было Option Strict On , эта ошибка была бы обнаружена во время компиляции.

Вы можете подойти к вашей проблеме по-другому, например, вы можете разбить строку на ее части и затем вызвать FromArgb, используя правильные значения цвета

Dim s As String = "224,224,224"

if Not string.IsNullOrEmpty(s) Then
    Dim p = s.Split(","c).Select(Function(x) int32.Parse(x.Trim()))
    form1.BackColor = Color.FromArgb(p(0),p(1),p(2))
End If
1 голос
/ 30 апреля 2019

Вы можете использовать ColorConverter из пространства имен System.Drawing.

Dim converter = New ColorConverter()
Dim color = DirectCast(converter.ConvertFromString("255,224,224"), Color)

Он также может преобразовывать цвета, заданные в качестве имени веб-цвета, например "PaleVioletRed", и в шестнадцатеричный формат, например "#FF0D60".

0 голосов
/ 30 апреля 2019

Так что мне удалось добиться того, что я добивался, но я не уверен в его эффективности ... он выглядит немного грязным ...

 If custom_color_scheme = true Then
 Dim back_color_bits() As String = this_dialog_backcolor.Replace(" ", "").Split(",")
 If Not this_dialog_backcolor = "" Then
     new_dialog.BackColor = Color.FromArgb(Convert.ToInt32(back_color_bits(0)), _
         Convert.ToInt32(back_color_bits(1)), Convert.ToInt32(back_color_bits(2)))
 End If

Как я уже сказал, это работает, но я уверен, что должен быть более чистый путь.кто-нибудь? * * 1004

...