有没有办法用propertyinfo对象获取对象属性的值?
psudo代码:
propertyinfoObject = Text
myobject.toCommand(propertyinfoObject)
上面的psudo代码应与
相同myobject.Text
我的目标是创建一个适用于任何对象的简单属性表单(稍后我会使用关键字来过滤掉我想要查看的选项)。
我的真实代码
Public Class PropertiesForm
Dim propertyInfoVar() As PropertyInfo
Dim Properties As New Form2
Dim listItem As New ListViewItem
Dim stringarray() As String
Public Sub New(ByRef sender As Object)
propertyInfoVar = sender.GetType().GetProperties()
For Each p In propertyInfoVar
stringarray = {p.Name.ToString, #INSERT VALUE SOMEHOW HERE#}
listItem = New ListViewItem(stringarray)
Properties.ListView1.Items.Add(listItem)
Next
Properties.Visible = True
End Sub
EDIT 只需按照以下建议使用propertyGrid!
答案 0 :(得分:0)
标准PropertyGrid
已经为您做了所有这些。过滤属性不是那么明显,这里是如何:
该控件包含一个BrowsableAttributes
属性,允许您指定只显示具有指定属性值的属性。您可以使用现有属性或自定义属性。这专门用于标记可见道具:
<AttributeUsage(AttributeTargets.Property)>
Public Class PropertyGridBrowsableAttribute
Inherits Attribute
Public Property Browsable As Boolean
Public Sub New(b As Boolean)
Browsable = b
End Sub
End Class
将其应用于Employee类以隐藏工资率或其他任何内容:
Public Class Employee
<PropertyGridBrowsable(True)>
Public Property FirstName As String
...
<PropertyGridBrowsable(False)>
Public Property PayRate As Decimal
<PropertyGridBrowsable(False)>
Public Property NationalInsuranceNumber As String
测试代码:
Dim emp As New Employee With {.Dept = EmpDept.Manager,
.FirstName = "Ziggy",
.PayRate = 568.98D,
...
.NationalInsuranceNumber = "1234567"
}
propGrid.BrowsableAttributes = New AttributeCollection(New PropertyGridBrowsableAttribute(True))
propGrid.SelectedObject = emp
BrowsableAttributes
是一个集合,因此您可以添加几个。