2012-08-17 109 views
2

全部,VS WinForm設計器總是改變自定義構造函數?

我正在使用MSVS 2010做C#/ WinForms項目。 我做了一個從組框中派生出來的對象,我改變了它的構造函數,這樣就可以在構造上使用整型變量。 我將我的對象添加到工具箱,並且我可以成功地將該對象插入到GUI設計器中。

但每次我做形式的改變我的自定義構造函數被改變。

所以我需要一種方法要麼修復VS讓每一個我換了一個表格時,代碼將無法重建本身還是我需要做固定對象我的自定義代碼的一些其他的方式。

基本上就是我做的是根據參數我通過我創建不同的一組小部件,並將其展示給用戶。但是我做了這個對象,因爲我試圖消除代碼重複。

有人可以幫忙嗎?

謝謝。

+0

@pst,但隨後將如何的代碼是什麼樣子?你能舉個例子嗎? – Igor 2012-08-17 01:47:10

+0

(我不確定爲什麼這個問題會得到低估...... VS設計師的煩惱可能會非常惱人,無論如何,如果沒有其他構造函數,你仍然可以消除代碼重複,請考慮張貼[相關部分]到目前爲止。) – 2012-08-17 02:29:46

回答

1

默認的無參數構造函數必須保留,它應該調用InitializeComponents。如果做到這一點,再加入二次構造應該是OK和設計師不應該惹它。

不過,我會建議不使用重載的構造函數,而是暴露方法或屬性來完成對一個WinForms控制所需的任務。

當WinRome,執行作爲次級..構造的


實施例:

// Leave this constructor - in the X.designer.cs file 
public MyType() { 
    InitializeComponents(); 
} 

// Add your own constructor - in the X.cs file 
public MyType (int x) : this() { 
    // .. 
} 

更新:避免手工編輯的 「X.designer.cs」 文件;這些是給設計師的。相反,編輯鏡像「X.cs」文件。部分類用於在這兩個文件之間分發設計器代碼和自定義代碼。

+0

pst ,我理解這一部分。我不明白的是如何與WinForms一起工作。你也評論屬性是令人困惑的。如果我在這個類中創建一個公共屬性並設置它,它會和將參數傳遞給構造函數一樣嗎?在這種情況下,我將需要重寫屬性的設置功能以進行必要的控制,請更正?謝謝。 – Igor 2012-08-17 02:11:17

+0

@Igor這是不一樣的,但他們可以達到類似的結果。想象一下,當你執行'control.Text =「blah」'時,有一個構造函數接受文本..這就是WinForm控件的設置/設計工作方式,它們主要基於屬性。 WinForms不*是關於「無副作用」的,並且設計者本身沒有默認構造函數的概念。 – 2012-08-17 02:22:28

+0

我按照上面代碼中的建議進行了更改,但不起作用。在GUI編輯器中更改某些內容後,我仍然修復了Form1.Designer.cs的代碼。任何其他想法? – Igor 2012-08-17 05:47:55