2015-11-12 56 views
1

我正在製作自定義控件,並且它具有控件中可用的NumberOfDatabases的屬性。默認情況下,存在一個名爲PrimaryDatabase的組合框,並且如果NumberOfDatabases設置爲1到2,則會創建另一個組合框並將其置於現有組合框的下方。看起來創建此ComboBox的代碼在設計器中運行,然後在運行時再次運行。在處理這種動態創建的對象時,是否必須在設計器中和運行時再創建對象?當我切換我的NumberOfDatabases屬性時,設計器如何處理動態創建對象?任何洞察力將不勝感激。VB.Net設計人員如何在運行時處理動態創建的對象

+0

如果你看看錶單設計器代碼,你會發現它和你在運行時添加控件的代碼非常相似。 VS會運行設計器代碼以呈現呈現的表單...(其中包括您的UserControl)。 – Plutonix

回答

1

他們只是在運行時出現和行爲。設計師完全沒有意識到它們,因爲它沒有被要求創建它們。所以你不能選擇它們,也不能設置它們的屬性。它們不會被序列化到usercontrol的InitializeComponent()方法中。無法用鼠標或鍵盤操作它們,設計師會攔截它。所以你只是看到它們。所見即所得是Winforms設計師的一個強大目標。

這是實際上的機率是正確的。通常有一些dbase代碼運行良好,它正常運行的可能性從來都不好,因爲你沒有正確的配置。在設計階段的例外是非常討厭的,可以摧毀設計,使程序員不知道的東西消失。因人而異。

在代碼中使用DesignMode property可防止在設計時運行有風險的代碼。

+0

謝謝你的迴應。我實際上遇到的問題是每個數據庫的UseDefaultPath屬性。如果UseDefaultPath屬性設置爲false,我想動態創建一個文本框,用戶可以在要創建的MDF/NDF的路徑中輸入該文本框。代碼規定文本框將在PrimaryDatabase下創建,並且動態創建的輔助數據庫的標籤\ combobox將在新添加的文本框下向下移動。一切工作正常,如果我添加第二個組合框下的文本框,但如果我創建第二個組合框,然後 – cjw

+0

然後添加文本框,然後轉移它下面的第二個組合框,我越來越奇怪的結果在設計器中雖然它在運行時正確運行) – cjw

+0

嗯,那正是我警告過你的,不是嗎?使用DesignMode屬性。 –