我需要找到一种方法来确定控件的 Visible 属性是通过属性更改设置的,还是从其父级继承它的值。使用反射器,我发现函数 this.GetVisibleCore() 和 this.GetState() 都是内部方法,所以我无法调用它们。
小部件本身是动态创建的,因此我不想在创建每个小部件后立即将方法附加到 VisibleChanged 事件,因此可以尝试监视此属性。如果必须的话,我想我会的,但我正在寻找更优雅的东西。
编辑
我真正想知道的是当我隐藏表单并去关闭它或构建表单但保持隐藏时,哪些 Visible 值是 false 因为表单是隐藏的以及哪些值是 false 因为它们被设置为 false .同样,我不想将方法附加到每个小部件的每个 VisibleChanged 事件。我只是想以某种方式从 Control 对象中读取它。
最佳答案
它仍然不是很清楚,但我假设问题是 Visible 属性 getter 返回控件的实际可见性状态。这不仅是 Visible 的最后一个赋值,它还考虑了控件的父级是否可见。换句话说,如果您在 UserControl 中有一个按钮,并且 UserControl 的 Visible = false,那么该按钮的 Visible 也将始终为 false。
您可以覆盖 SetVisibleCore() 以查明控件是否打算可见:
public bool CouldBeVisible { get; set; }
protected override void SetVisibleCore(bool value) {
CouldBeVisible = value;
base.SetVisibleCore(value);
}
关于c# - 如何确定 Control.Visible 是通过属性设置的还是值是继承的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656240/