如何通过反射设置或获取Button控件的FlatAppearance.BorderColor属性
你的代码有两个关键问题导致失败:
- 变量名不匹配:你定义了
MyPropertyInfo变量,但赋值时错误使用了PropertyInfo(这是类型名,不是变量名),会引发编译或运行错误。 - 属性路径错误:
FlatAppearance.BorderColor不是Button的直接属性,而是Button的FlatAppearance属性(类型为FlatButtonAppearance)的子属性,无法通过Button的Type直接获取这个嵌套属性。
正确的反射实现步骤
要操作这个嵌套属性,需要分两步处理:先获取Button的FlatAppearance属性实例,再操作该实例的BorderColor属性。
检索BorderColor值的代码
' MyObject为已存在的Button实例 Dim buttonType As Type = MyObject.GetType() ' 获取FlatAppearance属性的信息 Dim flatAppearanceProp As PropertyInfo = buttonType.GetProperty("FlatAppearance") ' 获取Button实例的FlatAppearance对象 Dim flatAppearanceObj As Object = flatAppearanceProp.GetValue(MyObject) ' 获取BorderColor属性的信息 Dim borderColorProp As PropertyInfo = flatAppearanceObj.GetType().GetProperty("BorderColor") ' 读取BorderColor值 Dim currentColor As Color = DirectCast(borderColorProp.GetValue(flatAppearanceObj), Color)
设置BorderColor值的代码
' 定义要设置的目标颜色 Dim newColor As Color = Color.Red ' (前面的步骤和检索时一致,获取到borderColorProp和flatAppearanceObj后) borderColorProp.SetValue(flatAppearanceObj, newColor)
简化写法(可选)
如果不需要分步调试,可以合并为更紧凑的代码:
' 检索值 Dim currentColor As Color = DirectCast( MyObject.GetType().GetProperty("FlatAppearance").GetValue(MyObject) .GetType().GetProperty("BorderColor").GetValue( MyObject.GetType().GetProperty("FlatAppearance").GetValue(MyObject) ), Color ) ' 设置值 MyObject.GetType().GetProperty("FlatAppearance").GetValue(MyObject) .GetType().GetProperty("BorderColor").SetValue( MyObject.GetType().GetProperty("FlatAppearance").GetValue(MyObject), Color.Blue )
内容的提问来源于stack exchange,提问作者user19532859
相关产品推荐
相关产品推荐

