1. 程式人生 > >設計器是如何確定哪些屬性會在Designer.cs中生成的?

設計器是如何確定哪些屬性會在Designer.cs中生成的?

之所以要解決這個問題, 是因為, 我的自定義元件程式碼是這樣寫的:

private int _radius;
public int Radius
{
    get { return this._radius; }
    set { this._radius = value; }
}
Radius值我將在建構函式裡面, 從資原始檔中獲取,同時, 我想_radius的值也就有了。

當我把自定義元件拖拽到一個Form裡面時, 設計器自動會自動在Designer.cs中生成一行程式碼, 該程式碼為Radius屬性賦值。

由於這裡程式碼的執行順序是:建構函式->設計器程式碼->Paint事件程式碼, 所以我在建構函式中獲取的值被以上這行程式碼給覆蓋了。

解決方案: 首先, 為私有變數賦值;其次,為Radius賦預設值, 即改為:

private int _radius = 1;
[DefaultValue(8)]
public int Radius
{
     get { return this._radius; }
     set { this._radius = value; }
}

總結: 在程式設計的過程中,一定要記得為變數賦初值, 不要等到在建構函式或者其它地方去為其賦值。