2010-01-14 74 views
1

我有以下問題:我有一個基本窗體停靠在面板底部和麪板內的一些按鈕。繼承此基本表單的表單可以通過屬性顯示在子表單屬性中的「ButtonCloseVisiblity」屬性來修改基本表單按鈕的可見性。問題是,有時當子窗體刷新時(例如,當我雙擊一個事件,刪除代碼中新創建的事件並返回給設計者)時,按鈕的可見性再次設置爲它們的默認狀態。在C#中的窗體繼承#

+2

你的英語很好。 – DOK 2010-01-14 13:07:17

回答

1

挖一個答案我來這一點,當我有獲得/從控制直接設置屬性如基本形式和使用性能:

public bool ControlVisibility 
{ 
    get{ return control.Visibility; } 
    set{ control.Visibility = value; } 
} 

當子窗體修改,這種修改沒有被持久化爲代碼,並且可見性是由基本表單定義的,因此每次打開子表單或重建項目時,繼承控件的可見性默認爲基本表單值。爲了解決這個問題,我們必須添加一個字段,並在屬性更改其值:

private bool _controlVisibility; 

public bool ControlVisibility 
{ 
    get{ return _controlVisibility; } 
    set 
    { 
     _controlVisibility = value; 
     control.Visibility = value; 
    } 
} 

這樣的屬性在代碼仍然存在。

0

我已經使用了繼承形式,但沒有使用它們的控件。

對不起,如果你已經試過這個。

嘗試將調試消息放置在基類的各種事件中。可能會有一次觸發,您可以在設計模式下重新應用您的設置。

2

這很可能歸屬於基本屬性上缺少的屬性。看看this MSDN page,特別是DesignerSerializationVisibilityAttribute

0

是的,它在Visual Studio中非常頻繁地發生。將您的更改保存在子窗體構造函數中,或者在OnLoad()中執行。如果您不希望在設計模式下以子窗體顯示更改,則還可以添加以下檢查。

if(!DesignMode){ 
    .... 
    } 
0

不知道我是否完全理解,但它似乎醫治,如果可見性屬性被覆蓋值?如果您在設計器文件中手動更改該值,則在下次刷新設計器文件時(例如,添加新控件時),該值將被覆蓋。

嘗試從屬性選項卡設置值,而不是在設計器文件中手動寫入。

+0

我更改了屬性選項卡中的屬性,但它始終被覆蓋 – Argons 2010-01-14 13:59:28

0

對於VS中的WinForms/controls上的可視化元素的繼承並不是那麼好或不可靠 - 正如我發現我的成本!消失或重新排列的控制或覆蓋的屬性恐怕是規範。

當我研究這個問題時,MS的迴應似乎是,它太難以正確實施,並且他們沒有計劃解決它!我認爲它很多依賴於子控件中的代碼生成而不是真正的繼承。

順便說一下,DesignMode可以直接在窗體上進行控件,但如果您有窗體控件或任何更深層次的控件,則不可靠。去年我在某個時候在這裏發表了一篇關於此事的文章或答案。