コントロールの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;
}
これはこれを行うための許容できる方法ですか?正常に動作し、パフォーマンスの問題は発生していません。非常に汚れているように見え、失敗する可能性があることは間違いありません(たとえば、実際にレンダリングする場合)。
誰かがこの解決策について何か考えを持っているか、価値を見つけるためのより良い方法を持っているなら、それは素晴らしいことです。