2010-09-13 45 views
3

我有這個問題,我創建了自己的DataGridViewColumn,我希望增加一些屬性,你可以在設計時編輯更改... 這裏是我的代碼:添加的DataGridViewColumn屬性設計時

private int nMaxLength; 
[Description("Fondoscala valore"), Category("Sea")] 
public int MaxLength 
{ 
    get { return nMaxLength; } 
    set { nMaxLength = value; } 
} 

,實際上是好的,當你打開列編輯器時,你會在Sea類別下看到這個屬性,你可以改變它,但是當你改變它時,如果你轉到.Designer.cs文件,你會看到MaxLength值爲0 ..沒有改變... 有什麼問題? 在此先感謝

回答

8

窗體設計器做一些內部的欺騙,以便允許您在設計時更改列的類型(例如從DataGridViewTextBoxColumnDataGridViewButtonColumn)。由於這一結果,設計師依賴於您對DataGridViewColumn子類有一個正確實現Clone()方法,即:

public override object Clone() { 
    MyDataGridViewColumn that = (MyDataGridViewColumn)base.Clone(); 
    that.MaxLength = this.MaxLength; 
    return that; 
} 

如果不重寫Clone()方法,設計師不會犯你做出任何改變自定義屬性值。

+0

這是一個爲期3年的+1。進入完全相同的問題。這是一個簡潔而正確的解決方案。 – KChaloux 2013-03-13 19:45:10

+0

感謝那個布拉德利,但是由於某些原因,我無法在運行時訪問這個值 - 它總是空的,是否還有一塊我仍然缺少的難題? – mattpm 2013-07-17 06:07:21

+0

我應該澄清,我可以從窗體上的控件訪問值,但我需要能夠在控件內部訪問該值以驅動其他功能。 – mattpm 2013-07-17 06:59:03