przecinek i kropka w jednym oknie.

0

Witam.
Mam kalkulator ( VC++2010 CLR/WFA), w nim 8 textBoxów gdzie są liczby. Tylko do dwóch zawsze wpisuję dane, pozostałe obliczają szukaną. Są 3 radioButtony do przełączania poszczególnych textBoxów, w zależności od tego których danych szukam. U mnie w domu wszystko chodzi jak należy, tzn na klawiaturze numerycznej jak naciskam kropkę to mam przecinek i jest OK, jednak w pracy na komputerze (Win XP), to textBoxów wpisuje się kropka. Niestety nie mam możliwości zmiany ani języka ani klawiatury. Użycie locale

 private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
			 {
				 Double label1, label2, label3, label4, label7, label8, label9;
				 Int32 sto, jeden, dycha, label5;
				 jeden=1;
				 sto=100;
				 dycha=10;

				 CultureInfo^ przecinek = CultureInfo::CreateSpecificCulture("pl-PL");

nie zdało egzaminu. Następnie spróbowałem inaczej:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
			 {
				 Double label1, label2, label3, label4, label7, label8, label9;
				 Int32 sto, jeden, dycha, label5;
				 jeden=1;
				 sto=100;
				 dycha=10;

				 NumberFormatInfo^ przecinek = gcnew NumberFormatInfo;
				 przecinek->NumberDecimalSeparator = ","; 

i kalkulator wysypuje się tylko podczas jednego szukania. Pracuje na 90%.
I tu jest dziwna sprawa, przynajmniej dla mnie. W textBoxach aktywnych wpisuję przecinek i jest OK, ale w tych nie aktywnych, gdzie nie mogę ich edytować liczby pokazują się już z kropką. Chyba nie bardzo tak może być.
Przebuszowałem już różne fora i nie mam pomysłów. Replace też nie pomaga, chyba że źle wpisuję:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
			 {
				 Double label1, label2, label3, label4, label7, label8, label9;
				 Int32 sto, jeden, dycha, label5;
				 jeden=1;
				 sto=100;
				 dycha=10;

				 Double::TryParse(textBox9->Text->Replace('.',','), label8);
				 Double::TryParse(textBox10->Text->Replace('.',','), label9);
				 Double::TryParse(textBox2->Text->Replace('.',','), label2);
				 Int32::TryParse(textBox6->Text->Replace('.',','), label5); 

Proszę o jakieś wskazówki lub propozycje.

0

Jak rozumiem, w domu masz ustawienia regionalne polskie (z przecinkiem jako separator dziesiętny), natomiast w pracy jakieś zagraniczne (z kropką). Samo Double::TryParse działa zgodnie z ustawieniami regionalnymi komputera, więc tak czy siak powinno konwertować dobrze.
Co dokładnie chcesz osiągnąć?

0

Rozróżnijmy dwie rzeczy:

• to, jak .Net rozpoznaje liczby rzeczywiste: czy jako separator dziesiętny traktowana jest kropka czy przecinek,
• jakie jest działanie klawisza koło 0 a poniżej 3 na klawiaturze numerycznej.

na drugą rzecz z wewnątrz własnego programu nie masz (nie powinieneś) mieć wpływu. to kwestia bieżącego układu klawiatury.

na pierwszą możesz (kombinując z CultureInfo, albo podmieniając znak w stringu) ale po co?

Jeśli Windows jest polski (ściślej: jeśli ustawiono polski jako język i klawiaturę systemu), to ma na klawiaturze numerycznej przecinek, a .Net rozpoznaje przecinek.
Jeśli Windows jest angielski, to na klawiaturze numerycznej jest kropka, a .Net przy parsowaniu double'i rozpoznaje kropkę.

I to bez żadnego kombinowania.

Jeśli masz przypadek gdy wpisuje się kropka, która nie działa, to jest to wina złej konfiguracji systemu, a nie twojego programu.

Nie należy psuć programów tylko po to, by działały na zepsutych komputerach.

0

• jakie jest działanie klawisza koło 0 a poniżej 3 na klawiaturze numerycznej.

  • w domu mam przecinek
  • w pracy kropkę

Jeśli Windows jest polski (ściślej: jeśli ustawiono polski jako język i klawiaturę systemu), to ma na klawiaturze numerycznej przecinek, a .Net rozpoznaje przecinek.
Jeśli Windows jest angielski, to na klawiaturze numerycznej jest kropka, a .Net przy parsowaniu double'i rozpoznaje kropkę.

  • w domu win 7 PL 64bit
  • w pracy win XP PL
    Tylko czegoś tu nie rozumiem. W pracy w excelu, i innych programach pakietu MS Office jest przecinek, a w tym moim kalkulatorze domyślnie wyświetla się kropka.
    Jak zastosuje taką lokalizację
NumberFormatInfo^ przecinek = gcnew NumberFormatInfo;
                                 przecinek->NumberDecimalSeparator = ",";  

to w aktywnych textBoxach mam przecinek, a w nieaktywnych kropkę. Po prostu mam mętlik, a może tak ma być?

0

Rozpoczynajac proces, uruchamiasz wate, ten watek to CurrentThread, mozesz ustawic dowolne ustawienia regionalne, lub ustawienia NumberFormat, czy cos takiego dla aktualnego CurentCultureInfo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1