如何确定Control.Visible是通过属性设置还是继承值

时间:2010-04-16 21:38:29

标签: c# .net winforms

我需要找到一种方法来确定控件的Visible属性是通过属性更改设置还是从其父级继承它的值。使用Reflector,我发现函数this.GetVisibleCore()和this.GetState()都是内部方法,因此我无法调用它们。

小部件本身是动态创建的,因此我不想在创建每个小部件后立即将方法附加到VisibleChanged事件,因此可以尝试监视此属性。如果必须,我想我会,但我正在寻找更优雅的东西。

修改

我真正想知道的是,当我隐藏表单并关闭它或构建表单但隐藏它时,可见值是错误的,因为表单被隐藏,哪些值为false,因为它们被设置为false 。我再次不想将方法附加到每个小部件的每个VisibleChanged事件。我只想以某种方式从Control对象中读取它。

1 个答案:

答案 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);
}