Witam. Piszę coś na wzór kopii kalkulatora Windows - po prostu uczę się C# no i mam drobny problem. Otóż:
Jak widzimy w kalkulatorze Windows po wpisaniu liczby dajmy na to 55 555 jest ona formatowana przy pomocy spacji - chodzi mi o tą przerwe między liczbami np 1 324, 11 567 - okej ten efekt udało mi się osiągnąć bez problemu za pomocą formatowania ToString i operatora #
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
if (przecinek == false)
{
textBox1.Text = double.Parse(textBox1.Text).ToString("# ### ### ### ### ##0").Trim();
}
}
}
Zależy mi aby liczba formatowana była w trakcie wpisywania dlatego jest to w evencie TextChanged. Tutaj wszystko gra. Jak wiemy kalkulator również posiada i negację.
Czyli tutaj również sprawa jest prosta, wystarczy zrobić takie cuś:
textBox1.Text = (double.Parse(textBox1.Text) * -1).ToString().Trim();
I teraz dochodzę do sedna sprawy - po zrobieniu czegoś takiego efekt jest niezadowalający, a mianowicie po wpisaniu w textbox dajmy na to liczby 55555 jest ona formatowana na 55 555, po nacisnięciu negacji wykonywany jest wyżej wymieniony kod i wywala exception, próbowałem wszelakiej maści NumberStyles, NumberFormatInfo. Próbowałem nawet modyfikacji mojego ToString na takie coś:
textBox1.Text = double.Parse(textBox1.Text).ToString("# ### ### ### ### ##0;-# ### ### ### ### ##0").Trim();
Oczywiście wychodzi exception, ale o dziwo zrobienie czegoś takiego:
textBox1.Text = double.Parse(textBox1.Text).ToString("# ### ### ### ### ##0;-# ###").Trim();
Nie powoduje już błędu, więc zakładam że to całe formatowanie ma jakiś swój limit, natomiast efekt jest niezadowalający, po wpisaniu liczby 55555555 -> 55 555 555 i kliknięciu przycisku negacji wychodzi -55 555555, ponieważ dodanie dalszego formatowania powoduje wyjątek. Wiem że pewnie kombinuje jak koń pod górę ale męczę się z tym małym efektem już od dobrych 5 godzin i nie mam pomysłu jak to zrobić. Zależy mi na tym aby po zanegowaniu liczba była zanegowana i sformatowana.
Dodam jeszcze że w owym formatowaniu znak średnika jest oddzielnikiem grupy, formatowanie pierwsze jest dla liczb dodatnich, natomiast po średniku następuje formatowanie liczb ujemnych. Męczy mnie fakt, że nie da się tego formatowania zrobić do końca - operuje na double więc też chce mieć sformatowane 15 liczb, jednakże jest to niemozliwe używając mojej metody, napisałem już wyżej czemu.
Proszę niech ktoś rzuci okiem i zaproponuje jakieś lepsze rozwiązanie :)
Pozdrawiam, Dawid.