ReadOnly Eigentschaft in vererbtem DataGridView nicht mehr änderbar

17/07/2008 - 09:54 von Martin Horst | Report spam
Hi,

ich habe ein DataGridView vererbt. In dem vererbten Control setzte ich
einige Felder auf für mich wichtige Standardwerte. So ist das vererbte
Control üblicherweise schreibgeschützt. Im Designer kann ich nun, wenn
ich das vererbte Control in eine Form ziehen, fast alle Felder mit
vorbelegten Werten nachtràglich àndern. Nur z.B. bei ReadOnly klappt das
nicht. Nach dem kompilieren springt der Wert wieder automatisch auf
true. Das gleiche gilt für den EditMode. Andererseits kann ich z.B. den
ClipboardCopyMode im Designer wiederum àndern. Ich möchte aber gerne
nachtràglich alle Felder noch veràndern können. Der Designer selber legt
auch keinen ReadOnly Eintrag in der Form an. Was kann man tun, damit der
Designer wieder spurt!?

Danke
Martin
 

Lesen sie die antworten

#1 Frank Dzaebel
17/07/2008 - 19:29 | Warnen spam
Hallo Martin,

ich habe ein DataGridView vererbt. In dem vererbten Control setzte ich
einige Felder auf für mich wichtige Standardwerte. So ist das vererbte
Control üblicherweise schreibgeschützt. Im Designer kann ich nun, wenn ich
das vererbte Control in eine Form ziehen, fast alle Felder mit vorbelegten
Werten nachtràglich àndern. Nur z.B. bei ReadOnly klappt das nicht. Nach
dem kompilieren springt der Wert wieder automatisch auf true.



Nun, das ist klar, die ReadOnly-Eigenschaft müsste ja
irgendwo persistiert werden. Das geschieht normal über
den Designer-Code. Nun fühlt sich der Designer aber sicher
nicht veranlasst, die Property im Designercode zu serialisieren,
weil, wenn Du sie auf false setzt, ja dies der DefaultValue gesetzt
ist, wozu soll man da noch als Designer umstàndlich Code
in die Datei schreiben, wenn der Wert doch bereits darauf steht
Du verstehst?

Ergo musst Du das DefaultValue-Attribut zusàtzlich setzen,
damit der Designer bei false auch schreibt. Das geht ggf.
über ein "new", obwohl man weiss, dass das böse daneben
gehen kann. Probier es mal:

public class MyDgv : DataGridView
{
public MyDgv()
{
this.ReadOnly = true;
}

//[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[DefaultValue(true)]
public new bool ReadOnly
{
get { return base.ReadOnly; }
set { base.ReadOnly = value;}
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen