ShouldSerialize und GUID

26/06/2009 - 09:46 von Michael Kolowicz | Report spam
Guten Morgen,

ich habe eine Klasse erstellt, die als Vorlage für eigene Steuerelemente
in unserer Anwendung dient (MasterControl).

Dort sind folgende Eigenschaften hinterlegt:

Private _AccessControlGUID As String =
System.Guid.NewGuid.ToString.ToUpper

''' <summary>
''' Eindeutige GUID zum bestimmen des Steuerelemnts
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks>Darf kein ReadOnly-eigenschaft sein, da es sonst nicht
''' vom Designer neu geschrieben wird</remarks>
Public Property AccessControlGUID() As String
Get
Return _AccessControlGUID
End Get
Set(ByVal value As String)
_AccessControlGUID = value
End Set
End Property

''' <summary>
''' Damit der Wert der Eigenschaft Serialisiert wird (Schreiben der
''' Designer-Datei)
''' </summary>
''' <returns></returns>
''' <remarks>Der Designer ruft diese Funktion auf um festzustellen,
ob
''' Code in InitializeComponent angelegt werden soll. Wenn True
zurück-
''' gegeben wird, erfolgt die serialisierung</remarks>
Public Function ShouldSerializeAccessControlGUID() As Boolean
Return True
End Function

Nun erstelle ich ein Steuerelement und àndere im Designercode die
Inherits-Zeile um, damit dies auf dieses Vorlage verweist.

Im Eigenschaftenfenster erscheint nun zwar eine GUID, aber dieses wird
nicht permanent in den DesignerCode eingetragen. Erst wenn ich den Wert
àndere, wird eine zusàtzliche Zeile im DesignerCode mit einer GUID
hinterlegt.

Ich möchte aber auf JEDEN Fall einen Eintrag im Designercode haben.
Besonders dann, wenn ich ein neues Element erzeuge.

mfg
Michael
 

Lesen sie die antworten

#1 Elmar Boye
26/06/2009 - 10:07 | Warnen spam
Hallo Michael,

Michael Kolowicz schrieb:
Dort sind folgende Eigenschaften hinterlegt:

Private _AccessControlGUID As String =
System.Guid.NewGuid.ToString.ToUpper




Trage hier ein
<DefaultValue("") > _
Public Property AccessControlGUID() As String
Get
Return _AccessControlGUID
End Get
Set(ByVal value As String)
_AccessControlGUID = value
End Set
End Property




und das ShouldSerialize kannst Du weglassen - und wenn darf
es durchaus Private sein.

Public Function ShouldSerializeAccessControlGUID() As Boolean
Return True
End Function



Wenn das im PropertyGrid mögliche zurücksetzen funktionieren soll,
so müsstet Du eher ResetAccessControlGUID implementieren.

Siehe http://msdn.microsoft.com/de-de/lib...8022e.aspx


Nun erstelle ich ein Steuerelement und àndere im Designercode die
Inherits-Zeile um, damit dies auf dieses Vorlage verweist.

Im Eigenschaftenfenster erscheint nun zwar eine GUID, aber dieses wird
nicht permanent in den DesignerCode eingetragen. Erst wenn ich den Wert
àndere, wird eine zusàtzliche Zeile im DesignerCode mit einer GUID
hinterlegt.

Ich möchte aber auf JEDEN Fall einen Eintrag im Designercode haben.
Besonders dann, wenn ich ein neues Element erzeuge.



Der Designer serialisiert einen Wert dann, wenn er mit seinen
Vorgaben bei der Erzeugung nicht übereinstimmt.

Dadurch dass Du den Wert bereit im Konstruktor erzeugst,
so meint er der Wert wàre der Standardwert - das er bei
jeder Instanz wechselt, kann er nicht erkennen.

Deswegen lege wie oben gezeigt DefaultValueAttribute
http://msdn.microsoft.com/de-de/lib...ibute.aspx
auf eine leere Zeichenfolge fest. Danach sollte der Eigenschaftswert
fett angezeigt werden und auch in der Designer.vb auftauchen.

Gruß Elmar

Ähnliche fragen