1

我试图找出asp.net页面上的特定控件是否已将其“可见”属性分配为真或假。问题是可见属性爬上父级列表,如果其中任何一个显示为不可见,则查询的控件也将显示为不可见。我需要知道控件本身的设置。

我做了一些搜索并找到了如何在 Asp.Net 中获取 Visible 属性的设置/真实值的帖子,它提供了以下解决方案

public static bool LocalVisible(this Control control){
    var flags = typeof (Control)
        .GetField("flags", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(control);

    return ! (bool) flags.GetType()
        .GetProperty("Item", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(flags, new object[] {0x10});
}

但是当我尝试它时,它在 GetProperty 上返回了一个“发现不明确的匹配”错误。

有人可以指出我做错了什么,或者展示另一种获得我想要的方式吗?

4

1 回答 1

1

我有同样的问题(两年后)。这是我刚刚在您提到的主题中写的答案:

如果有人试图让 Jørn Schou-Rode 的代码在 VB.NET 中工作,这里是对我有用的代码。当我在 VB 中简单地翻译他的代码时,我得到一个“发现歧义匹配”异常,因为标志“Item”属性有 3 种风格。

<Extension()>
Public Function GetLocalVisible(ctl As Control) As Boolean
    Dim flags As Object = GetType(Control).GetField("flags", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(ctl)
    Dim infos As PropertyInfo() = flags.GetType().GetProperties(BindingFlags.Instance Or BindingFlags.NonPublic)
    For Each info As PropertyInfo In infos
        If info.Name = "Item" AndAlso info.PropertyType.Name = "Boolean" Then
            Return Not CBool(info.GetValue(flags, New Object() {&H10}))
        End If
    Next
    Return ctl.Visible
End Function
于 2014-12-11T17:16:37.310 回答