Bodka v TextBoxe pri praci s cislami   zodpovězená otázka

VB.NET

Ahoj chcem sa spytat ako riesite to ze ked chcete nieco zratat napr. pomocou TextBoxov a potrebujete zadat nejake cislo s desatinnym miestom (napr. 10,5) musim zadat desatinu ciarku a nemozem pouzit bodku (napr. 10.5)

Aplikacia mi vzdy skolabuje a napise ze sa nepodarilo hodnotu v TextBoxe previest na cislo pritom ked zadam do TextBoxu hodnotu s ciarkou a pozriem si premenu tak v premennej pracuje VB s bodkou.

Momentalne to mam osetrene pomocou funkcie ktorej zadam cislo s ciarkou a ona prevedie cislo s ciarkou na cislo s bodkou...

Neda sa to spravit jednoduchsie ?? pomocou nejakeho formatu? napr.

String.Format({0:p02},hodnota)

Dakujem

dodo

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejlepší pro zadávání číselných hodnot je ovládací prvek NumericUpDown, který podporuje i desetinná čísla. Další možnost je použít MaskedTextBox, který při nastavení správné masky umožňuje zadávat pouze čísla. Třetí možnost je použít obyčejný TextBox a na událost Validating provádět validaci hodnoty pomocí metody Double.TryParse, potom však budete muset počítat s aktuální jazykovou kulturou (v české jazykové kultuře neprojde validace čárky jako desetinného oddělovače).

Pokud píšete aplikaci pro použití v různých národních prostředích, doporučuji nastudovat základy lokalizace a globalizace:

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ak som to pochopil správne tak či použijem TextBox NumericUpDown alebo MaskedTextBox vzdy budem musieť pouzit ako oddeľovač desatinného miesta čiarku ak budem mat v regionálnych nastaveniach vo Windows-e nastavenú čiarku. Vyskúšal som ju zmeniť na bodku a samozrejme hneď to funguje aj s bodkou...

Tazke musím napisat kód ktorý mi bude moju aplikáciu ako keby prepinat do "Anglického" profilu podla vašeho linku... Skusim odtial nico vycitat popripade pozriet nieco na codeproject.com

dodo

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud použijete NumericUpDown, tak to je specializovaný prvek na zadávání čísel (nic jiného do něho zadat nelze), u kterého lze nastavit počet desetinných míst a desetinný oddělovač si nastaví sám. Jeho vlastnost Value vrací hodnotu typu Double kterou není třeba validovat.

Pokud byste chtěl provádět validaci desetinného čísla pro jazykovou kulturu např. USA (který používá jako oddělovač desetinnou čárku), můžete použít kód:

Dim n As Double

'Validace hodnoty 10,1 pro kulturu en-US projde
Dim isValidFormat As Boolean = Double.TryParse("10,1", Globalization.NumberStyles.AllowDecimalPoint, New System.Globalization.CultureInfo("en-US"), n)

'Validace hodnoty 10,1 pro kulturu cs-CZ neprojde
Dim isValidFormat As Boolean = Double.TryParse("10,1", Globalization.NumberStyles.AllowDecimalPoint, New System.Globalization.CultureInfo("cs-CZ"), n)

Smyslem je to, aby validace prošla pouze ve formátu specifickém pro danou jazykovou kulturu. Kolik čechů by asi zadávalo číslo v americkém formátu a kolik američanů v českém?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

- Ano NumericUpDown poznam viem o jeho nastaveniach mam ho pouzity aj v mojom program ale na dalsie vstupne hodnoty sa mi viac paci TextBox mozno pouvazujem a zmenim vsetky Txb na NumericUpDown

- K tej validacii. My vo firme pracujeme s EN klavesnicou a vsetok nas sowtware pouziva ako oddelovac desatineho miesta bodku(.) nie ciarku preto aj ja chcem v mojej aplikacii zachovat tuto moznost ci uz sa aplikacia spusti ci uz v prostredi Slovenskom Ceskom alebo Anglickom.

Dufam ze ma rozumiete

dodo

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Rozumím, ale to máte špatný postup, který vás bude nutit používat jazykovou kulturu odlišnou od té nastavené v systému. To se může velmi nežádoucím způsobem projevit například v porovnávání textových řetězců, práci s datem, měnou a podobně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takze navrhujete ostat pri kulture SK/CZ a namiesto bodky pouzivat ciarku?

dodo

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Navrhuji zůstat v takové kultuře, jaká je po spuštění aplikace automaticky nastavena hlavnímu vláknu a poté děděna ostatními vlákny. Tudíž to, co je nastaveno v Ovládací panely/Místní a jazykové nastavení. Potom bude validace probíhat korektně pro aktuálně nastavenou kulturu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Vsimol som si ze ja vlasne robim v SK kulture ale vzhladom na to ze CNC program "pisem" s EN klavesnicou tak pouzivam pri Num klavesnici bodku ale ked klavesnicu prepnem do SK tak sa automaticky zmeni na ciarku.

Dakujem za vycerpavajuce odpovede ste naozaj odpornik.

dodo

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback