2012-03-24 4 views
1

Ich arbeite an einem "DataGridView" in C# 3.5, in "winforms" -Anwendung.So kopieren Sie benutzerdefinierte Eigenschaften beim Erstellen von Klon

Ich habe eine benutzerdefinierte Spalte „MaskTextColumn“, ich habe einige benutzerdefinierte Eigenschaften in ihm mag: Maske, „PromptChar“ usw.

Wenn ich Klon mache von „MaskTextColumn“ meine Kunden Eigenschaften nicht kopiert Zu einem neuen Objekt möchte ich einen Klon erstellen, wie er mit einem benutzerdefinierten Eigenschaftswert ist.

Antwort

2

Sie benötigen die Clone-Methode in Ihrer benutzerdefinierten abgeleiteten Klasse außer Kraft zu setzen.

Etwas wie folgt aus:

public override object Clone() 
{ 
    var clonedColumn = base.Clone() as CustomColumn; 
    clonedColumn.CustomProp = this.CustomProp; 
    return clonedColumn; 
} 
+0

Ich glaube nicht, das wird funktionieren. 'base.Clone()' 's Rückgabewert ist eine MaskTextColumn, so dass '' CustomColumn'' die clonedColumn-Variable auf Null setzt und die nächste Zeile 'NullReferenceException' auslöst. –

+0

Diese Methode wird wie in der CustomCell-Klasse angewendet, wobei base.Clone() as das Klassenobjekt zurückgibt –

2

Sie sollten die Klonmethode überschreiben, um Ihre benutzerdefinierten Eigenschaften einzubeziehen. Wie diese link Staaten,

Wenn Clone überschreiben ... sicher sein, die Werte aller Eigenschaften auch zu kopieren, die zu der abgeleiteten Klasse hinzugefügt wurden.

Der Code lautet:

public override Object Clone() 
{ 
    object clonedObject = base.Clone(); 
    MaskTextColumn clonedColumn = clonedObject as MaskTextColumn; 
    clonedColumn.PromptChar = this.PromptChar; 
    // .. more property settings here 
    return clonedColumn; 
}