我需要找到一种方法来确定控件的Visible属性是通过属性更改设置还是从其父级继承它的值。使用Reflector,我发现函数this.GetVisibleCore()和this.GetState()都是内部方法,因此我无法调用它们。
小部件本身是动态创建的,因此我不想在创建每个小部件后立即将方法附加到VisibleChanged事件,因此可以尝试监视此属性。如果必须,我想我会,但我正在寻找更优雅的东西。
修改
我真正想知道的是,当我隐藏表单并关闭它或构建表单但隐藏它时,可见值是错误的,因为表单被隐藏,哪些值为false,因为它们被设置为false 。我再次不想将方法附加到每个小部件的每个VisibleChanged事件。我只想以某种方式从Control对象中读取它。
答案 0 :(得分:2)
它仍然不是很清楚,但我认为问题是Visible属性getter返回控件的实际可见性状态。这不仅仅是Visible的最后一个赋值,它还考虑了控件的父级是否可见。换句话说,如果你在UserControl中有一个按钮并且UserControl的Visible = false,那么按钮的Visible也总是为假。
您可以覆盖SetVisibleCore()以查明控件是否可见:
public bool CouldBeVisible { get; set; }
protected override void SetVisibleCore(bool value) {
CouldBeVisible = value;
base.SetVisibleCore(value);
}