Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

int ToString voor TextBox

Pagina: 1
Acties:

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 30-10 12:53

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ik ben een beetje aan het rommelen voor een win 8 app, nu zit ik eigenlijk met een vraagje. Wellicht is het een vrij kleine vraag maar ik heb geen zin om de coffee corner over te nemen :+

In elk geval, stel je hebt dit voorbeeld:

- Ik wil een value - wat altijd INT is - , gaan plaatsen in de UI. Logischerwijs pak ik gewoon een textbox, aangezien ik niet direct een 'random data veld' zie.

Al snel kom je ergens met dit:

code:
1
2
3
4
5
int blaat = 0;

blaat++;

MyLittleTextBox.Text = blaat.ToString();


Mij ontgaat eigenlijk alle logica om dingen als een INT te gaan behandelen om het vervolgens maar 'te casten' naar een string... Ok, logisch gezien wil je de variabele als INT in je code behandelen, en kun je hier dan dingen mee doen als '++'. Waarom is het niet gewoon mogelijk om dit als INT te behouden als je dit naar de user gooit? Waarom moet het perse een string zijn, terwijl het technisch gezien een int is.

Ik ben er ook van bewust dat je het in een .Text gooit, maar is er geen equivalent zoals Value voor een text field die zich dan wel zo gedraagt dat hij het als een Data output ziet ipv een Value voor dat element?

  • Lethalis
  • Registratie: April 2002
  • Niet online
Je zou zelf een class kunnen maken die overerft van TextBox en daar zelf een IntValue property aan kunnen hangen als je dat per se wilt :P Bovendien is het waarschijnlijk beter om een control te gebruiken dat enkel met integers werkt, zodat je ook niets anders kunt invoeren.

Maar goed, een textbox is nou eenmaal een textbox. Het geeft tekst weer. Een String is intern een char array en je zult dus een bewerking moeten uitvoeren als je een int naar een char array wilt krijgen.

Bovendien is er meer dan int. De weergave van een double is bijvoorbeeld afhankelijk van jouw regionale settings. Een double kan als 5.4 maar ook als 5,4 worden weergegeven. Om dit netjes te doen zal je dus een conversieslag moeten hebben waar je het liefste ook invloed op kunt uitoefenen.

Dit zie je dan ook terug in het .NET framework. ToString() werkt (ook) met een IFormatProvider (Culture) en afhankelijk daarvan zullen bepaalde getallen anders worden weergegeven. Bij int maakt het wellicht niet zoveel uit, maar het is wel zo consistent om dit voor alle typen te doen.

PS:
Ik zou waarschijnlijk overerven van TextBox, de InputScope op Digits zetten en een property EditValue van het type int implementeren. En het user control DigitInput noemen.

Dan kun je voortaan een DigitInput gebruiken hiervoor en hoef je zelf niet meer te casten etc :) Eventueel zou ik -1 teruggeven als de input toevallig toch geen Integer is (schijnt dat de inputscope niet voldoende afdekt) of een extra property maken IsValid als boolean.

De code wordt dan:

int blaat = 4;
MyDigitInput.EditValue = blaat;

if (MyDigitInput.IsValid) blaat = MyDigitInput.EditValue;

[ Voor 29% gewijzigd door Lethalis op 24-10-2013 18:31 ]

Ask yourself if you are happy and then you cease to be.


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:18
Lethalis schreef op donderdag 24 oktober 2013 @ 17:59:
Je zou zelf een class kunnen maken die overerft van TextBox en daar zelf een IntValue property aan kunnen hangen als je dat per se wilt :P Bovendien is het waarschijnlijk beter om een control te gebruiken dat enkel met integers werkt, zodat je ook niets anders kunt invoeren.
[...]
Dan zou ik eerder kijken naar een ValueConverter (MSDN: IValueConverter). True je converteert nog steeds de integer, maar vanuit de code hoef je er niet meer druk om te maken. Alleen de designer zit dan nog met een extra stap en gezien in dit geval de programmeur en designer waarschijnlijk dezelfde zijn schiet je er nog niet veel mee op, behalve wellicht een iets betere scheiding tussen UI en code.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Lethalis schreef op donderdag 24 oktober 2013 @ 17:59:
Je zou zelf een class kunnen maken die overerft van TextBox en daar zelf een IntValue property aan kunnen hangen als je dat per se wilt :P Bovendien is het waarschijnlijk beter om een control te gebruiken dat enkel met integers werkt, zodat je ook niets anders kunt invoeren.
Aangezien de meeste grafische API's alsnog met strings werken als er tekst op 't scherm moet komen zou je die ook nog eens om moeten bouwen.

Oftwel: dit is gewoon hardstikke logisch. Het zijn generieke controls en om een getal als een serie karakters te tekenen zal het ergens omgezet moeten worden naar een serie karakters.

https://niels.nu


  • Merethil
  • Registratie: December 2008
  • Laatst online: 08:50
Als je hem alleen wilt plaatsen en niet wilt aanpassen verder kan je toch ook een label pakken? Niet helemaal de bedoeling, maar dan heb je geen conversie, want die werkt met content afaik.

[ Voor 19% gewijzigd door Merethil op 24-10-2013 21:38 ]


Verwijderd

Ik ben er ook van bewust dat je het in een .Text gooit, maar is er geen equivalent zoals Value voor een text field die zich dan wel zo gedraagt dat hij het als een Data output ziet ipv een Value voor dat element?
Zelfs bij meer generieke oplossingen zal de control zelf intern de .ToString() method aanroepen.
Zoals hierboven al aangegeven: Je gaat van een cijfer naar een array van characters. De control moet zich niet bezighouden met hoe dit juist moet gebeuren of hoe hoe een string representatie van pakweg honderdduizend er uit moet zien: 100000 of 100.000? Misschien zelfs 100,000.
Pagina: 1