我是C#中的新手,但對編碼並不陌生 - 做了近二十年的工作 - 並且在構建的自定義控件中的屬性出現問題,該控件從Panel繼承。當我放置我的屬性時,我可以在Designer屬性列表中看到它們,甚至可以設置它們,但是在運行我的小應用程序時,似乎不使用這些屬性值。如果我以編程方式更改屬性,也是一樣的:沒有錯誤,但是我的控件什麼都不做,就好像它們沒有正確設置。但是,如果我在課堂上以編程方式進行練習,他們確實有用。我的猜測是,在我的屬性設置/獲取的東西是不正確的。請看到我是如何做下面的代碼塊:爲什麼我的控件的屬性不會在其類之外改變?
public class ColorStrip : Panel
{
// properties
// ------------------------------------------
// size of color clusters (boxes)
private int _clusterSize = 20;
// controls if show the buttons panel
private Boolean _showButtons;
// property setters/getters
// ------------------------------------------
// clusterSize...
public int clusterSize
{
get { return _clusterSize; }
set { _clusterSize = value; }
}
// showButtons...
public Boolean showButtons
{
get { return _showButtons; }
set { Console.Write(_showButtons); _showButtons = value; }
}
....
所以在我的形式,例如負載,甚至在點擊事件的地方,如果我把colorStrip1.showButtons = FALSE;或colorStrip1.showButtons = true;無論如何(在設計模式下將控件放置在窗體中後,colorStrip1將是實例名稱)... console.write始終表示'false';即使我在設計屬性列表中將其設置爲「true」,它也不會反映已確定的值,即使我將其默認爲true,也不會在外部進行更改。有任何想法嗎?非這些方法都不能獲得新的和外部安置的屬性值,顯然getter/setter的東西不起作用。在我看來,我並沒有按照我設定的方式,或在以外的課程獲得我的物業。它只適用於它,作爲魅力...任何幫助...非常感謝!
乾杯
鋰
P.S.爲了澄清SOLUTION:
在這種情況下,設置屬性沒有工作,因爲我試圖構造,這似乎是因爲它是,以及無法獲得新的值範圍內使用新的設定值時,建築事情。如果我更改屬性值在設計模式>屬性編輯器或在對象的外部代碼,說在它的父窗體的加載事件,它會改變它,但除了構造函數,當然:)可讀的所有方法:)
是否有多個線程獲取和設置屬性?你能給我們測試代碼嗎? – DVD 2010-12-15 20:45:10
請記住,您正在編寫'_showButtons'的*舊*值 - 如果您連續執行兩組,您是否看到新值? – 2010-12-15 20:49:40
請注意,.NET *中的屬性應該使用pascal-casing命名,也就是說,第一個字母應該是大寫。 – Lucero 2010-12-15 21:17:36