vb.net - 从字符串变量以编程方式设置表单背景颜色

vb.net - set form background color programatically from a string variable

我有一个包含 RGB 值的字符串,例如“224,224,224”。 我正在尝试使用该值来设置表单的背景颜色,但它出错了,我不确定为什么。

我正在尝试...

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

我得到异常

control does not support transparent background colors.

我尝试修改字符串以包含第 4 个值,所以它变成了“255,224,224,224”,这也出错了,给出了算术运算导致过载的异常。

我也试过像这样格式化字符串:

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

这次我收到异常“从字符串 'Color [A=255, R=33, G=33, B=33]' 到整数类型的转换无效。

任何帮助都适用。

所以我已经设法实现了我想要的,但我不确定它的效率......感觉有点脏......

 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

就像我说的,它有效,但我相信一定有更简洁的方法。 有人吗?

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

您可以使用命名空间 System.Drawing 中的 ColorConverter

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

它还可以转换给定的颜色,如 "PaleVioletRed" 和十六进制格式,如 "#FF0D60"