1

asp.netページの特定のコントロールで、「Visible」プロパティがtrueまたはfalseに割り当てられているかどうかを調べようとしています。問題は、visibleプロパティが親のリストをクロールし、それらのいずれかが非表示として表示される場合、クエリされたコントロールも非表示として表示されることです。コントロール自体が何に設定されているかを知る必要があります。

私はいくつかの検索を行い、次の解決策を提供する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

私も同じ問題を抱えていました(2年後)。これは、あなたが参照しているトピックで私が書いた答えです。

誰かがJørnSchou-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 に答える