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

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

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

编辑

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

最佳答案 它仍然不是很清楚,但我认为问题是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);
}
点赞