使用propertyinfo对象

时间:2016-12-19 18:41:16

标签: vb.net properties propertyinfo

有没有办法用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!

1 个答案:

答案 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

enter image description here

BrowsableAttributes是一个集合,因此您可以添加几个。