2010-09-13 2 views
3

Я эту проблему, я создал свой собственный DataGridViewColumn, и я хочу добавить некоторые свойства, которые можно изменить в DesignTime редактирования ... вот мой код:добавить DataGridViewColumn свойство DesignTime

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

и на самом деле ok, когда вы открываете редактор столбцов, вы видите это свойство под категорией Sea, и вы можете изменить его, но когда вы его измените, если вы перейдете в файл .Designer.cs, вы увидите значение MaxLength равным 0 .. без изменений ... В чем проблема ?? заранее спасибо

ответ

8

Формы Дизайнер делает некоторые внутренние фокусы для того, чтобы позволить вам изменить тип столбца (например, от DataGridViewTextBoxColumn до DataGridViewButtonColumn) во время разработки. В результате этого, дизайнер полагается на свой подкласс DataGridViewColumn, имеющий правильно реализованная Clone() метод, а именно:

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

Если вы не переопределить метод Clone(), дизайнер не будет совершать какие-либо изменения, внесенные значения пользовательских свойств.

+0

Вот еще 3 года. Стало быть в одной и той же проблеме. Это было кратким и правильным решением. – KChaloux

+0

Спасибо за то, что Брэдли, по какой-то причине, однако, я не могу получить доступ к значению во время выполнения - он всегда пуст, есть ли часть головоломки, которую я все еще не хватает? – mattpm

+0

Я должен уточнить, я могу получить доступ к значению из элемента управления в форме, но мне нужно иметь доступ к внутреннему значению внутри элемента управления для управления другими функциями. – mattpm