Laden...

Größe des UserControls soll im Designer nicht änderbar sein

Erstellt von MarcDirk vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.801 Views
M
MarcDirk Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Größe des UserControls soll im Designer nicht änderbar sein

Hallo!

Ich habe mir ein User Control geschrieben.
Jetzt möchte ich die Property "Locked" im propertygrid immer fest auf true stehen haben, ohne das ein User das wieder auf false zurück setzen kann.

Ich habe es so versucht:

public override bool Locked { get { return true; } }

Fehlermeldung:
Fehler 1 'WindowsFormsApplication1.DigitInputBox.Locked': Es wurde keine passende Methode zum Überschreiben gefunden. C:\Users\Marc\Documents\Visual Studio 2013\Projects\WindowsFormsApplication1\WindowsFormsApplication1\DigitInputBox.cs 92 34 WindowsFormsApplication1

Im Designer kann ich dieses aber manuell im propertygrid auf true setzen.

Das eigentliche Ziel ist, dass ein User die Größe des Controls nicht ändern können soll.
Ich hoffe hier hat jemand eine erhellende Idee für mich!

Gruß

Marc

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo MarcDirk,

wenn meinst du mit User? Den Endbenutzer? Der kann doch die Größe von Controls eh nicht ändern, außer der Programmierer erlaubt ihm das? Oder meinst du den Programmierer, der dein UserControl im Designer benutzt? Und meinst du entsprechend das PropertyGrid im Designer?

Wenn du willst, dass die Größe eines Controls durch einen Programmierer unverändertbar ist, dann solltest du eher erwägen, passend Control.SetBounds zu überschreiben. Mit dem PropertyGrid hätte das dann wenig zu tun.

herbivore

M
MarcDirk Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Hallo herbivore,

die Größe meines UserControls soll durch den Programmierer im Designer nicht geänder werden können. Wenn ich die Locked Eigenschaft auf true setze, dann verhält sich das Control so wie ich das möchte. Es kann mit der Mouse nicht mehr vergrößert werden.

Ich hatte mir gedacht, es müsste eine Möglichkeit geben diese Eigenschaft im UserControl festzulegen, so das Locked defaultmäßig auf true steht und auch nicht mehr geändert werden kann, bzw. wenn möglich im PropertyGrid auch nicht mehr angezeigt wird.

Das UserControl hat jetzt eh jede Menge Eigenschaften, die ich gerne abscahlten möchte, da zuviele.
Wie kann ich das erreichen?

Control.SetBounds sagen mir noch nichts, da werd ich wohl noch googlen müssen.

Gruß
Marc

R
212 Beiträge seit 2012
vor 10 Jahren

Leg es doch einfach im designer fest, oder stell die min und max werte der größe auf den gleichen wert.

M
MarcDirk Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Hallo Robin0,
der Programmierer könnte aber nun die Werte im PropertyGrid wieder zurückändern. Das soll er aber nicht, oder habe ich Dich da falsch verstanden???
Gruss
Marc

F
10.010 Beiträge seit 2004
vor 10 Jahren

Wozu gibt es Properties?

Damit man vor dem setzen der internen Repräsentation des Wertes noch Überprüfungen machen kann.

Also prüfe bei allen Properties erst den Lockstatus und schreibe nichts.
Bei vorhandenen musst Du eben überschreiben/überdecken.

76 Beiträge seit 2008
vor 10 Jahren

Vielleicht ist das BrowsableAttribute das, was du suchst. Dann wird es im PropertyGrid nicht mehr angezeigt.

Anschließend könntest du die Size-Eigenschaft überschreiben und bei dem get-Accessor einen statischen Wert übergeben lassen.

In etwa so:

public override Size Size { 
     get { 
          return new Size(100, 100); 
     }
     set {
          // Do nothing
     }
}

[Edit]Es ist natürlich richtig, was herbivore schreibt. Ganz klar! Habe nicht dran gedacht, nachzuforschen, welches die tiefste Ebene der Size-Setzung ist. Diese sollte man natürlich überschreiben![/Edit]

Hinweis von herbivore vor 10 Jahren

Es gibt viele Wege die Größe eines Controls zu setzen: Size, Width, Height, ... Deshalb sollte man immer (das schon oben genannte) SetBounds überschreiben, weil alle Arten der Größen- (und Positions)änderung darauf zurückgeführt werden.

R
212 Beiträge seit 2012
vor 10 Jahren

Ich finde ja eigentlich generell wenn ein anderer programmierer sich die mühe macht und die einstellungen ändert, ist dieser selbst schuld wenns nicht funktioniert.

ich würd einfach n attribut [System.Obsolete("Größe nicht verändern!")] dranhängen.