2010-09-13 46 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