Archief - C# Windows Forms UserControl property vraag

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

SideShow

Legacy Member
Hallo

Ik zou graag weten hoe ik een property maak in een user control, die in de class een double is, maar ook soms wordt voorgesteld als een percent ..

Waarschijnlijk is dit heel vaag, maar als je kijkt naar hoe een default form zijn opacity property toont in het properties venster, ishet wel duidelijk waarschijnlijk.

Of is dit gewoon een 'format' ofzo ?

Het komt erop neer dat ik in mijn user control een double heb (van 0.00.. tot 1.00..) die ik gebruik als percent ... bij het gebruik van die property in designer wil ik wel met 27% werken ... gewoon omdat het leuk is ;)

Fraggie

Legacy Member
Hoe je intern je data voorstelt hoeft de eindgebruiker niet te weten.

Zo kan ik een Tijd klasse hebben die:
- 1 property heeft die een tijdstip voorstelt door de tijd in milliseconden sinds POSIX time. Via vele methoden krijgt de eindgebruiker deze data in de vorm van strings:
> HH:MM:SS of [HH:MM] of ..
of in de vorm van integers:
> int uur, int minuut, int seconden

Je kan ook omgekeerd te werk gaan en data opslaan in 3 ints:
- int uur
- int minuten
- int seconden

en via verschillende methoden strings/ints terug geven, het resultaat is dezelfde als is de ene beter dan de anderen.


Jij bent nu opzoek naar de omgekeerde richting. Van een geformatteerde string naar een double. Wat wij kunnen zien van de .NET code is het volgende:
Code:
public double Opacity { get; set; }
Bijgevolg kan je afleiden dat er nooit een string wordt aangeboden aan de property. Men zal deze eerst testen op de geldigheid, converteren naar een double (wss mét afrondingen) en dan pas geven aan de property.

Zo kan je bijvoorbeeld ook m.b.v. method overloading de property aanpassen:
public void setMyVar(double d) { .. }
public void setMyVar(string s) { .. }

Waardoor je met één methode(naam) perfect kan doen wat jij zegt.

SideShow

Legacy Member
In de designer staat er "100%", terwijl de property een double is ..

Ik heb het nog even van dicht bekeken, en het werkt blijkbaar gewoon met een attribuut [TypeConverter(typeof(OpacityConverter))]

Merci om even te kijken!

Fraggie

Legacy Member
Qua leesbaarheid en portable code vind ik het implementeren van je eigen methode een betere oplossing.

Uit de examples:
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");

Met je eigen functies:
MyColor c = MyColor();
c.set("Red");
c.set(Color.Red);
c.set(0xFF0000);

Qua excepties lijkt het me ook een stuk flexibeler.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan