ATNEL tech-forum
https://forum.atnel.pl/

Jak wykryć jaki separator dziesiętny w ustawieniach win.?
https://forum.atnel.pl/topic18150.html
Strona 1 z 1

Autor:  ciamciak [ 13 kwi 2017, o 16:24 ]
Tytuł:  Jak wykryć jaki separator dziesiętny w ustawieniach win.?

Cześć

Czy jest jakiś prosty sposób na odczyt domyślnego separatora dziesiętnego w windows('.' czy ',')?
Potrzebuję tego do uodpornienia aplikacji na te dwa przypadki podczas wprowadzania danych.
Pewnie dałoby się testować na stringu, czy jest liczbą, ale może jest jakaś słuszniejsza opcja?

Pozdro

Autor:  HomoChemicus [ 13 kwi 2017, o 16:42 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

https://msdn.microsoft.com/pl-pl/library/system.globalization.cultureinfo.currentculture(v=vs.110).aspx
Zakładka "Pobieranie bieżącej kultury".
I do tego to: https://msdn.microsoft.com/pl-pl/library/system.globalization.numberformatinfo.numberdecimalseparator(v=vs.110).aspx

Autor:  Harry [ 13 kwi 2017, o 19:23 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

A nie lepiej uodpornić aplikację walidując wprowadzane dane?
Co będzie jak użytkownik wklepie sobie raz kropkę, a raz przecinek?

Autor:  ciamciak [ 13 kwi 2017, o 20:55 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@HomoChemicus
Dzięki, udało się pobrać.

@Harry
No właśnie kombinuję jak to zrobić, żeby kropka i przecinek były traktowane jako separator dziesiętny.
Głównie poto, żeby niezależnie od wyboru systemowego separatora działał przecinek na klawiaturze numerycznej.

Autor:  micky [ 14 kwi 2017, o 08:44 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

Ja dawno temu to edytowałem układ klawiatury windowsa do tego celu :)

Sent from my Mi-4c using Tapatalk

Autor:  ciamciak [ 14 kwi 2017, o 10:12 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@micky
Też niezła opcja, ale raczej dla własnego kompa.
Bawiłem się tym kiedyś jak miałem lapka z japońską klawiaturą i bez prawego ALT-a, ale za to z paroma klawiszami ekstra 8-)

Autor:  ciamciak [ 14 kwi 2017, o 10:45 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@Jazio
A skąd program będzie wiedział gdzie zaczyna się ułamek?

Autor:  ciamciak [ 14 kwi 2017, o 12:20 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@Jazio
No tak, jak format jest stały,to niema problemu.

Z tym dzieleniem też niezły sposób, bo mamy na pewno liczbę.

Puki co pobieranie z "NumberFormatInfo" działa i potem w razie czego robię replace przecinek<->kropka.
Choć najfajniej by było, żeby w locie podmieniało wszystko np. na kropkę już w widocznym polu wpisywania.

Autor:  mirekk36 [ 14 kwi 2017, o 12:25 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

Nie wiem czy przeczytałem wszystkie odpowiedzi więc może coś źle napiszę albo coś źle zrozumiałem to przepraszam - ale wydaje mi się, że wszyscy Panowie podchodzicie do rozwiązania "od tzw tyłka strony" ....

Po jaką kiszkę wykrywać separator ?

Jak można go zmienić lokalnie dla naszej aplikacji na taki jak chcemy ;) czyli nie ważne jakiego łindołs dostarczy nam separatora dziesiętnego (czochra nas to) to nasza aplikacja zamieni go na taki jak my chcemy wewnątrz niej i QUNIEC, zawsze w ten sposób rozwiązuję taki problem w swoich aplikacjach ;)

Autor:  ciamciak [ 14 kwi 2017, o 12:34 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@mirekk36

Chodzi o to, żeby niezależnie od ustawień systemowych kropka na klawiaturze numerycznej była separatorem dziesiętnym.
Tylko że w zależności od ustawień OS, czasem ta kropka jest przecinkiem, a czasem kropką.
Więc teoretycznie jak wymuszę kulturę USA, a w systemie mam ustawiony PL (przecinek na numerycznej), to wywali mi błąd że to nie liczba.

Chyba że się jednak da?
Wizualnie najlepiej byłoby prze mapować klawisz dla samej aplikacji.

Autor:  mirekk36 [ 14 kwi 2017, o 14:01 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

a czyli nie chodzi ci o ustalenie formatu dla przecinka tylko o zabawę z numeryczną klawiaturką i tamtejszym separatorem, który w zależności od ustawień regionalnych - raz bywa separatorem dziesiętnym a raz kropką ....

No to już trza sobie obsługiwać zdarzenia klawiatury i zamieniać w locie

Autor:  ciamciak [ 18 kwi 2017, o 16:08 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@mirekk36
Próbowałem już podejść do takiego eventa:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tylko minus jest taki, że kursor zawsze ląduje na początku.

Można niby zakodować obsługę Backspace, żeby obcinał ostatni znak, ale może da się sam kursor przestawić?

Autor:  mirekk36 [ 18 kwi 2017, o 16:39 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

ciamciak napisał(a):
Tylko minus jest taki, że kursor zawsze ląduje na początku.

Musi być jakaś taka właściwość dla textboxa jak .SelEnd albo coś podobnego - wystarczy ją ustawić na ilość znaków jaka się pojawiła w kontrolce plus ten jeden znak separatora i powinno być ok

Autor:  ciamciak [ 18 kwi 2017, o 17:00 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@mirekk36
Znalazłem przed chwilą coś takiego jak SelectionStart.
Wtedy niby można zrobić: textBox1.SelectionStart = textBox1.TextLength
I wtedy kursor ustawia się zawsze na końcu, ale to też ma swoją wadę, że nie można edytować np. liczby w środku.
Kurcze chyba trzeba całego textboxa zaprogramować na nowo, żeby to zachowało się tak samo jak oryginał tyle że z podmienionym znakiem.

Autor:  mirekk36 [ 18 kwi 2017, o 17:41 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

Cytuj:
I wtedy kursor ustawia się zawsze na końcu, ale to też ma swoją wadę, że nie można edytować np. liczby w środku.

No ale wiesz? co to za problem wykryć który znak jest separatorem ? i ustawiać kursor odpowiednio do wprowadzanego tekstu.

Ty źle obkodowałeś sobie to zdarzenie po prostu ... pogłówkuj troszkę , przecież w takim zdarzeniu nie musisz w ogóle reagować na inne znaki niż separator na dodatek dodając je wciąż na końcu, to JEDNO. A DRUGIE - reaguj tylko na separator ale uwzględniając pozycję SelStart toż to jest i do odczytu i zapisu.

Autor:  MichalXY [ 18 kwi 2017, o 18:31 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

ciamciak - poszukaj w zdarzeniach textboxa czegoś takiego jak onEdit albo coś w ten deseń i oprogramuj zdarzenie tak aby w trakcie edycji podmienić np. kropkę na przecinek lub jak ty wolisz. Do podmiany służy metoda replace.

edit

te zdarzenie o którym piszę to TextChanged...

Autor:  ciamciak [ 18 kwi 2017, o 20:03 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@mirekk36
Rzeczywiście da się tą pozycję odczytywać :)
Jak pierwszy raz próbowałem odczytywać SelectionStart to mi z jakiegoś powodu zera wyrzucało i myślałem, że to służy tylko do ustawień. Ale jak już ruszyło to Substring-iem poskładałem wszystko do kupy i wygląda że wszystko gra i burczy ;)

@MichalXY
Tak, korzystałem z replace jak wspomniałem i po dołączeniu sprawdzania systemowego separatora wszystko działa ok.
Teraz chodziło bardziej o kosmetykę, żeby nie zależnie od konfiguracji maszyny wszędzie była ta sama konwencja (np. żeby wszędzie były kropki).

Dzięki wszystkim za sugestie, chyba mam już podstawowy komplet narzędzi żeby temat ogarnąć.
Pozdro

Autor:  HomoChemicus [ 18 kwi 2017, o 20:17 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

Jakoś zatwierdzasz dane, jakimś enterem/przyciskiem, więc może spróbuj tak:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  ciamciak [ 18 kwi 2017, o 20:28 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@HomoChemicus
Podobnie zrobiłem, tylko na początku jest warunek sprawdzający co jest ustawione w systemie, a replace robię bez sprawdzania warunku textBox1.Text.Contains(',') - najwyżej nie będzie co zmieniać. No i zamienia albo w jedna albo w drugą - żeby warunek liczy był spełniony.
Akurat w tym przypadku niczym danych nie zatwierdzam, tylko wszystko leci przez TextChanged.

Ale skoro teraz mam obsługę podmiany separatora w locie, to powinno się już dać wymusić jakąś culturę i pominąć replace.

Autor:  Harry [ 19 kwi 2017, o 03:47 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

Aleś ty się uparł na tą "kulturę" ;)
Po co chcesz zmieniać to co jest w textboxie, format i walidacje danych musisz zrobić przy zapisie do bazy, a wyświetlanie olej, no chyba że Ci się bardzo nudzi.
Weź pod uwagę fakt, że np nie wszystkie laptopy posiadają klawiaturę numeryczną, co wtedy? ;)

Autor:  ciamciak [ 19 kwi 2017, o 08:12 ]
Tytuł:  Re: Jak wykryć jaki separator dziesiętny w ustawieniach win.

@Harry
Chcę, żeby wprowadzany separator (wizualnie) był taki sam jak te wyświetlane we wszelkich innych polach z wynikami i móc to kontrolować. Jak już będę miał sprawę opanowaną, to już nie będę musiał do tego wracać. Dodatkowo jak korzysta się np. z eventa presskey można wyciąć znaki, które nie powinny się w danym polu nigdy pojawić.

A to że czasem niema klawiatury numerycznej nie przeszkadza, po prostu dostajemy drugi klawisz separator extra ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/