NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Oli Wonder
Člen
Avatar
Oli Wonder:30.4.2017 16:25

Zdravím mám problém s ošetrením vstupu . Ako vyriešiť to aby užívaťeľ bud mohol použiť aj .(bodku) namiesto ,(čiarky) v čísle alebo po napísaní do textboxu .(bodku) namiesto ,(čiarky) mu vypísalo text

 
Odpovědět
30.4.2017 16:25
Avatar
lubos.blader
Člen
Avatar
Odpovídá na Oli Wonder
lubos.blader:12.7.2017 22:25

Nie som si istý, ale asi si chcel toto:

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
      {
          {
              if (textBox1.Text.Contains("."))
              {
                  textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1) + ",";
                  textBox1.SelectionStart = textBox1.Text.Length;
              }
          }
      }
Editováno 12.7.2017 22:26
 
Nahoru Odpovědět
12.7.2017 22:25
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na lubos.blader
ostrozan:13.7.2017 7:18

když už tak :

private void textBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    if (!(char.IsDigit(e.Text, 0)||e.Text==".")) e.Handled = true;
}

ti zajistí ,že kromě definovaných znaků - tady čísel a tečky se nic jiného k textBoxu nedostane

tvoje řešení není dobré - zbytečně přepisuješ už jednou napsaný znak

 
Nahoru Odpovědět
13.7.2017 7:18
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Oli Wonder
ostrozan:13.7.2017 7:34

Takz mi není moc jasné, na co to potřebuješ - odhaduju, že kvůli parsování - pak v případě, že do textBoxu patří jen čísla použij výše uvedené řešení
pokud ale tam musí být i normální text tak použij metodu Replace()

string floatNumber = "123.4";
float.Parse(floatNumber.Replace(".", ","));
 
Nahoru Odpovědět
13.7.2017 7:34
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Oli Wonder
ostrozan:13.7.2017 8:27

nebo :

string floatNumberStr = "123.4";
float floatNumber= float.Parse(floatNumberStr, new CultureInfo("en-US"));

vezme jako oddělovač tečku i čárku

možností je prostě víc

 
Nahoru Odpovědět
13.7.2017 8:27
Avatar
lubos.blader
Člen
Avatar
Odpovídá na ostrozan
lubos.blader:13.7.2017 8:49

Nerozumiem dosť dobre tvojej poznámke. Bodku zmení na čiarku. Čo je tam zbytočne prepísané?

 
Nahoru Odpovědět
13.7.2017 8:49
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:13.7.2017 9:37

při tvém řešení se nejdřív do textBoxu vypíše tečka - fyzicky je tam zobrazená -to vyvolá událost TextChanged ve které teprve zjišťuješ , jestli text neobsahuje tečku - a pokud ano, tak ji vyměníš za čárku (mimochodem na to je vymyšlená ta metoda String.Replace() ) a znovu vypíšeš upravený text do textboxu

Kdežto při použití textBox_Previ­ewTextInput se vůbec s textem v textBoxu nemanipuluje, pokud na vstupu není tebou definovaný znak

je to jako kdybys stál ve škole u tabule a psal to číslo
u tvé verze by se na tebe učitel díval a v momentě, kdy bys napsal tečku by se zvedl, šel k tabuli všechno cos napsal smazal a napsal to znovu s čárkou

u mojí verze by ti řekl : "desetinná místa odděl čárkou"

 
Nahoru Odpovědět
13.7.2017 9:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.