一千萬個為什麽

搜索

如何確定Control.Visible是通過屬性設置還是繼承值

我需要找到一種方法來確定控件的Visible屬性是通過屬性更改設置還是從其父級繼承它的值。使用Reflector,我發現函數this.GetVisibleCore()和this.GetState()都是內部方法,所以我不能調用它們。

小部件本身是動態創建的,因此我不想在創建每個小部件之後將方法附加到VisibleChanged事件,因此可以嘗試監視此屬性。如果必須,我想我會,但我正在尋找一些更優雅的東西。

編輯

我真正想知道的是當我隱藏表單然後關閉它或構建表單但隱藏它時,可見值是錯誤的,因為表單是隱藏的,什麽值是假的,因為它們被設置為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);
}

轉載註明原文: 如何確定Control.Visible是通過屬性設置還是繼承值