Textboks kun indeholdende tal

Tags:    c#

Hej.

Jeg er helt ny til c#. Har forsøgt at læse mig til det meste, og kan da også lidt c# efterhånden.

Men jeg forstår simpelthen ikke hvorfor det skal være så svært at lave en textboks, hvor brugeren af programmet kun kan indtaste tal, og hvor der kommer en slags advarsel op (dog helst ikke message.showbox

-så mit spørgsmål går egentlig på:
1. Hvordan laves en boks hvor der kun kan tastes tal.
2. Findes der andre advarsler end "message.showbox.
3. Kan man gøre således at feltet formateres når man forlader det? (f.eks hvis der tastes 1234567, formateres det automatisk til 1.234.567 når feltet forlades)

Håber i kan hjælpe - på forhånd tak.
Daniel Madsen



10 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 24 karma
Sorter efter stemmer Sorter efter dato
Fold kodeboks ind/udCSharp kode 




1. Du skal gå ind og tjekke, ved en indtastning det er et tal. Det kan du evt gøre med:

Fold kodeboks ind/udCSharp kode 


2: Du kan gøre lige hvad du vil... ingen siger at du SKAL bruge Messagebox.Show(); I nedenstående har jeg lavet en fået en eventhandler til at farve en textbox rød, hvis den har en ugyldig værdi:

Fold kodeboks ind/udCSharp kode 


3: Ja, dét er nemt nok:

Fold kodeboks ind/udCSharp kode 


Med udgangspunkt i de tre ovenstående blokke, så er eks. 2 dog overflødigt hvis de to andre er i brug. Desuden så er det første eksempel kun brugbare de steder (f.eks i Danmark), hvor vi bruger komma som decimaltegn.



Fold kodeboks ind/udCSharp kode 


AsDecimalString er en extension method:
Fold kodeboks ind/udCSharp kode 





Indlæg senest redigeret d. 23.11.2011 17:14 af Bruger #16594
1. Du kan evt. lave en event listenener der lytter hver gang der foretages en ændring i din tekst boks, på den måde kan du tjekke om indtastningen er et tal eller ej

2. Det ved jeg ikke lige - plejer at programmere i Java for det meste :)

3. Ja, du kan også her lave en event der bare lytter hver gang at fokus går væk fra elementet, og herefter lave noget kode der formatterer dit tal som du ønsker det skal se ud.



Tag evt. et kig på denne:

http://msdn.microsoft.com/en-us/library/kkx4h3az.aspx

Der findes ikke andre indbyggede besked mekanismer end MessageBox.

men du kan jo lave din egen, og få den til at opfører sig fuldstændigt som du ønsker :)



Indlæg senest redigeret d. 21.11.2011 14:50 af Bruger #10718
Mange tak skal i have for alle jeres svar.

Især idéen med at lave tekstfeltet rødt ved forkert indtastning tiltaler mig, da en stor kontor bygning med computere der bipper hver gang en bruger taster forkert, er til at blive sindsyg af :)

Jeg vil helt sikkert sætte mig og kigge nærmere på jeres kode og links i løbet af de næste par dage.

I skal ihvertfald have tak for hjælpen indtil videre - måske vender jeg tilbage hvis jeg ikke lige kan få det til at spille 100 ;)

Mvh. Daniel Madsen



Du skal i hvert fald lige vende tilbage og stemme på de mest brugbare af svarene, Daniel :)

Mvh.

Kasper (TSW)



Yes. Godt du siger det - oprettede mig selv som bruger idag, så var ikke helt klar over hvordan jeres forum fungerede.

Forbeholder mig dog retten til, først at gøre det når jeg har kigget nærmere på det. Min arbejdsdag med c# er ovre for idag! ;)
Men tak alligevel ;)



@ebb: Din KeyPress eventhandler er da godt nok noget smartere end min! Char.IsDigit() er da noget nemmere + at du har taget højde for backspace ;)



Indlæg senest redigeret d. 21.11.2011 23:03 af Bruger #16372
Så har jeg fået kigget på det og fået det til at virke. Mange tak for hjælpen alle sammen. Det har virkelig været en stor hjælp!

Lige her på falderebet kunne jeg godt tænke mig at vide om man kan lave 2 events for samme handling?

Jeg har forsøgt bare at lave en simpel lommeregner, hvor man i felt1 og felt2 kun kan taste tal, og når man så forlader feltet formatere den med "." og "," separator.

Felt3 plusser så bare felt1 og felt2. Dette sker så snart man laver den event der hedder "enter" i felt3. Men kan jeg også få den til at formatere med separator, når jeg laver "enter" event i feltet?

Håber i forstår mit spørgsmål :)



t