代码之家  ›  专栏  ›  技术社区  ›  JDMX

如何确定control.visible是通过属性设置的还是该值是继承的

  •  4
  • JDMX  · 技术社区  · 15 年前

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

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

    编辑

    我真正想知道的是,当我隐藏表单并关闭它或构建表单但将其隐藏时,哪些可见值是假的,因为表单是隐藏的,哪些值是假的,因为它们被设置为false。同样,我不想为每个小部件的每个visiblechanged事件附加一个方法。我只是想从控制对象中读出它。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Hans Passant    15 年前

    现在还不是很清楚,但我假设问题是visible属性getter返回控件的实际可见性状态。这不仅仅是最后一个赋值给visible,它还考虑控件的父控件是否可见。换句话说,如果用户控件中有一个按钮,并且用户控件的visible=false,那么按钮的visible也将始终为false。

    您可以重写setVisibleCore()以确定控件是否要可见:

    public bool CouldBeVisible { get; set; }
    
    protected override void SetVisibleCore(bool value) {
      CouldBeVisible = value;
      base.SetVisibleCore(value);
    }