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"
。
我有一个包含 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"
。