C# Formátování čísla v textboxu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# Formátování čísla v textboxu – .NET – Fórum – Programujte.comC# Formátování čísla v textboxu – .NET – Fórum – Programujte.com

 

Chatař
~ Anonymní uživatel
7 příspěvků
8. 2. 2012   #1
-
0
-

Zdravím a prosím o radu. Na formuláři mám textbox sloužící pro zadávání čísla. Chtěl bych, aby se číslo zobrazilo ve formátu 999 999 999,99, nejlépe již v průběhu psaní. Jak se to dá ošetřit, jaké jsou metody (postupy)?

Děkuju

Petr Antoň

Nahlásit jako SPAM
IP: 195.113.82.–
CZechBoY+4
Věrný člen
8. 2. 2012   #2
-
0
-

třeba přes string.format

Nahlásit jako SPAM
IP: 213.192.10.–
t0mas0
Newbie
9. 2. 2012   #3
-
0
-

A MaskedTextBox nemůžeš použit? Ten už je na to připravený.

Nahlásit jako SPAM
IP: 46.226.16.–
Chatař
~ Anonymní uživatel
7 příspěvků
9. 2. 2012   #4
-
0
-

#3 t0mas
V maskedtextboxu umím nastavit, že tam má být číslo, ale ne jak se to číslo má zobrazit.

Nahlásit jako SPAM
IP: 195.113.82.–
LukoSS
~ Anonymní uživatel
73 příspěvků
9. 2. 2012   #5
-
0
-

Pokud dobře rozumím otázce, tak tu jde jen o doplnění mezer po třech znacích, počítaných od konce. To by nemělo být nijak obtížné. Myslím, že stojí za úvahu, jestli má to přidávání mezer při psaní vůbec smysl. Je to trochu pracnější a některé uživatele by tohle chování mohlo mást.

Nahlásit jako SPAM
IP: 88.103.252.–
Chatař
~ Anonymní uživatel
7 příspěvků
9. 2. 2012   #6
-
0
-

#5 LukoSS
Ono jde o to, že je to jediný vstup na formuláři, následuje už jen klik na tlačítko a vypsání výsledků. Takže TextBox vůbec nemusí ztratit focus (no, musí, ale to už bude pozdě). A jde o ošetření chyby, přečíst 66666 je horší než 66 666, pak se chyba v řádu udělá velmi lehce. Chtěl bych i ošetřit, když uživatel zadá desetinou čárku jako "." nebo "," . Navíc uživatelé, pro které tohle dělám, jsou na takové chování zvyklí z EIS.

Nahlásit jako SPAM
IP: 195.113.82.–
LukoSS
~ Anonymní uživatel
73 příspěvků
9. 2. 2012   #7
-
0
-

#6 Chatař
Já bych tento problém řešil tak, že bych nejprve zkontroloval, zda ten textBox obsahuje pouze čísla + jednu tečku/čárku. Pak bych vzal část, ve které jsou celá čísla, a tu bych předal metodě, která jim přidá ty mezery. Ta metoda by mohla vypadat nějak takto (parametr charCount je počet znaků, po kterých to má rozdělovat řetězec, takže v tomto případě to bude 3):

private string AddSpaces(string text, int charCount)
{
    string textWithSpaces = String.Empty;
    int textLength = text.Length;
    int firstSpace = textLength % charCount;
    int lastSpace = 0;

    for (int i = firstSpace; i < textLength; lastSpace = i, i += charCount)
        textWithSpaces += text.Substring(lastSpace, i - lastSpace) + ' ';

    textWithSpaces += text.Substring(lastSpace);

    return textWithSpaces.Trim();
}

Po té úpravě je potřeba nějakým způsobem umístit kurzor na správné místo. Tuto metodu budeš muset volat asi v KeyUp eventu. Tahle metoda neřeší, jestli v textu už mezery jsou nebo ne, ale s tím si určitě poradíš.

To, jestli uživatel zadal tečku nebo čárku můžeš kontrolovat až po stisku toho tlačítka (stačí na tom textu zavolat metodu Replace a nahradit případnou čárku tečkou). Aby se to chovalo jako číslo, tak bude pak samozřejmě nutné odstranit i ty mezery.

No snad jsem tě nakopl správným směrem..

Nahlásit jako SPAM
IP: 88.103.252.–
Chatař
~ Anonymní uživatel
7 příspěvků
9. 2. 2012   #8
-
0
-

#7 LukoSS
Tohle vypadá nadějně, KeyUp event nastane vždy po stisku klávesy v textboxu? A ano, kontrolovat tečku čárku bohatě stačí po stisku tlačítka. Děkuju.

Nahlásit jako SPAM
IP: 195.113.82.–
LukoSS
~ Anonymní uživatel
73 příspěvků
9. 2. 2012   #9
-
0
-

#8 Chatař
Událost KeyUp nastane po puštění klávesy. Pokud to budeš testovat po stisku tečky nebo čárky, tak si velmi usnadníš práci, nicméně je potřeba myslet na to, že se někdo splete a bude pak opravovat to číslo. Pak by se ta metoda nezavolala a bylo by to zformátované špatně. Stejně tak při stisku backspace nebo delete.

Nahlásit jako SPAM
IP: 88.103.252.–
LukoSS
~ Anonymní uživatel
73 příspěvků
9. 2. 2012   #10
-
0
-

#8 Chatař
Teď se dívám, že jsem si špatně přečetl tvůj příspěvek, tak to o tom formátování po stisku tečky ignoruj 

Nahlásit jako SPAM
IP: 88.103.252.–
liborb
~ Redaktor
+18
Guru
9. 2. 2012   #11
-
0
-

Ten problém je složitější než se zdá. Musíš totiž reagovat i na vložení textu přes schránku. A dále ti chvilku bude trvat než uděláš správnou reakci na delete a backspace. Musí to fungovat i v případě, že je kurzor za/před mezerou, tj. aby smazala nejenom mezera, ale i číslo .... No a pak tu máme výběr části textu a opět správná reakce na smazání, vyjmutí, přesunutí, nahrazení .... Ve skutečnosti to vede na něco, čemu se říkalo subclass komponenty. Všechno se dá, jen se to nevzdá bez boje :) .

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 80.84.1.–
LukoSS
~ Anonymní uživatel
73 příspěvků
9. 2. 2012   #12
-
0
-

#11 liborb
Při vložení textu přes Ctrl+V se zavolá KeyUp, takže se tam ty mezery vloží správně. Samozřejmě pokud se najde někdo, kdo klikne pravým a dá vložit, tak už nastane problém, ale z toho co jsem pochopil, tak se tam ty čísla budou zadávat ručně, takže to není nezbytně nutné řešit. Stejně tak různé úpravy částí textu, tedy kromě toho smazání čísla, pokud je kurzor na mezeře. Hlavně je ale důležité si správně pohlídat pozici kurzoru, protože ho po tom přidání mezer nelze jen vrátit zpátky na původní místo..

Ale souhlasím, že by bylo vhodné vytvořit si svoji komponentu, která bude dědit z TextBoxu. Něco takového se do budoucna může hodit.

Nahlásit jako SPAM
IP: 88.103.252.–
Chatař
~ Anonymní uživatel
7 příspěvků
10. 2. 2012   #13
-
0
-

#12 LukoSS
Ano, bude se jednoduše zadávat částka, vstup pouze psaním. Jde opravdu jen o to, aby se dobře četla zapsaná hodnota a předešlo se v chybě v řádu.

Nahlásit jako SPAM
IP: 195.113.82.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý