4

コントロールのGetofthe Visibleプロパティは、ツリーを再帰的に検索して、コントロールがレンダリングされるかどうかを示します。

親コントロールが何に設定されているかに関係なく、コントロールの「ローカル」に表示される値を確認する方法が必要です。つまり、それ自体がtrueまたはfalseに設定されているかどうか。

私はこの質問を見ました、Visibleプロパティの「実際の」値を取得するにはどうすればよいですか?これはReflectionを使用してローカル状態を取得しますが、WebControlsでこれを機能させることができませんでした。これは、値を取得するためのかなり汚い方法でもあります。

私は次の拡張方法を思いついた。これは、親からコントロールを削除し、プロパティをチェックしてから、コントロールを検出した場所に戻すことで機能します。

    public static bool LocalVisible(this Control control)
    {
        //Get a reference to the parent
        Control parent = control.Parent;
        //Find where in the parent the control is.
        int index = parent.Controls.IndexOf(control);
        //Remove the control from the parent.
        parent.Controls.Remove(control);
        //Store the visible state of the control now it has no parent.
        bool visible = control.Visible;
        //Add the control back where it was in the parent.
        parent.Controls.AddAt(index, control);
        //Return the stored visible value.
        return visible;
    }

これはこれを行うための許容できる方法ですか?正常に動作し、パフォーマンスの問題は発生していません。非常に汚れているように見え、失敗する可能性があることは間違いありません(たとえば、実際にレンダリングする場合)。

誰かがこの解決策について何か考えを持っているか、価値を見つけるためのより良い方法を持っているなら、それは素晴らしいことです。

4

3 に答える 3

0

プロパティを使用して、コントロールの可視性を公開できます。これで問題が解決する可能性があります。

間違っている場合は修正してください。

于 2010-01-05T11:08:07.453 に答える