对于属性BackColor,调用的目标抛出了异常

时间:2012-10-26 15:13:45

标签: vb.net reflection

当我尝试为文本框的属性BackColor设置值时,我得到了该错误 我所拥有的是一个formBuilder 因此,使用我的formBuilder Runninng,我可以创建一个表单,添加一个TabControl,并在tabControl中创建一个groupBox。在GroubBox里面我有一些文本框 对于每个TextBox,我将它们的属性(带有值)保存在xml中 当我尝试从xml(在另一个项目中)重新创建表单时,我使用该代码:

   For Each cntProperty As XElement In elem.Elements
     Dim propertyName As String = cntProperty.Name.ToString
     Dim targetProperty As PropertyInfo = parentControl.GetType().GetProperty(propertyName)
     If targetProperty IsNot Nothing Then
       Dim propType As Type = FindType(targetProperty.PropertyType.ToString)
       Dim convertedVal = ConvertValue(cntProperty.Value, targetProperty.PropertyType)
       parentControl.GetType().GetProperty(propertyName).SetValue(parentControl, convertedVal, Nothing)'Here I get the exception
     End If
    Next

parentControl是我尝试重新创建的控件(在本例中为textBox) FindType是一个返回属性类型的函数(工作正常) ConvertValue是一个将字符串从xml转换为适当类型的函数   对于颜色我使用此功能:

   Color.FromName(val)'val is the string value from the xml

因此,对于某些文本框,我有字符串值:颜色[白色]
转换后我有一个颜色:“{Name = Color [White],ARGB =(0,0,0,0)}”
当我试图将此颜色值设置为属性BackColor时,我得到异常:
调用目标抛出了异常。
和innerException: Control不支持透明背景颜色

任何想法都能解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

aRGB(255,255,255,255)是白色,第一个是alpha通道 - 0是透明的。 winforms控件的内部异常是正确的。 WPF没有这个问题。

答案 1 :(得分:0)

我找到了解决方案。 我的代码中的问题实际上是函数:

 Color.FromName(val as String)

没有按预期工作。我应该只使用val作为名称(例如白色),但我有“Color [White]”

所以我只是在使用该函数之前清理我的字符串,一切都很好。