Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 10:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 13 kwi 2017, o 16:24 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2017, o 16:42 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2017, o 19:23 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

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

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 kwi 2017, o 20:55 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 08:44 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

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

Sent from my Mi-4c using Tapatalk


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 10:12 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 10:45 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 12:20 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 12:25 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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 ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 12:34 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 kwi 2017, o 14:01 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 16:08 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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ć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 16:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 17:00 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 17:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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 postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 18:31 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

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...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 20:03 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 20:17 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 20:28 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2017, o 03:47 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

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? ;)

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2017, o 08:12 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

@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 ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO