Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# textbox - wstawianie znaku "-" co 5 pozycję

Trollek123 17 Sie 2013 13:16 1905 9
  • #1 17 Sie 2013 13:16
    Trollek123
    Poziom 10  

    Witajcie

    Chciałbym zrobić TextBox, w którym będzie coś w rodzaju prezentacji klucza produktu.
    Chodzi o to, żeby tekst który trafił tam z automatu był dodatkowo rozdzielony "-" co piątą pozycję - np tak:

    NCOF1-9TFIG-4RBRM-VYBCB-GLKOB

    Wiecie, jak ten problem rozwiązać ? Ja jakoś nie potrafie - jaką funkcje nie wbiję to albo mi wstawia jeden myślnik na początku, albo się wogóle nic nie dzieje. Będę wdzięczny za pomoc.

    0 9
  • #3 17 Sie 2013 13:53
    the_fifth_horseman
    Poziom 32  

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    "tekst który trafił tam z automatu", wpisany czy wklejony?
    Dla wpisanego:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Dla wklejonego:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Przypisz te funkcje do zdarzeń KeyPress i TextChanged twojego pola tekstowego i właściwie gotowe.
    Będziesz musiał nieco poprawić jeżeli chcesz z tego skorzystać - kod przechwytuje wciśnięcia wszystkich przycisków (w tym znaki niedrukowalne oraz kombinacje typu CTRL+V) oraz zawsze dodaje kreskę na końcu wklejonego kodu.

    0
  • #4 17 Sie 2013 14:40
    Trollek123
    Poziom 10  

    Dokładnie chodzi o to, co znajduje się w zielonym pasku. Ja podaje dane klienta, a program to przetwarza na klucz. Chodzi o poprawienie wyświetlania owego klucza produktu.
    C# textbox - wstawianie znaku "-" co 5 pozycję

    Mały problem: do czego przypiąć DashesEveryNthPos ? Pokazuje mi, że tego nie ma.

    0
  • #6 17 Sie 2013 16:06
    Trollek123
    Poziom 10  

    Błąd
    Unable to cast object of type 'System.Windows.Forms.Button' to type 'System.Windows.Forms.TextBox'.

    Dotyczy TextBox Sender = (TextBox)sender;
    Fakt faktem, instrukcja generowania klucza wychodzi spod buttona "generuj licencję". Ma to jakieś znaczenie ?

    Dobra, to ja wkleiłem źle kod. Teraz pytanie: z jakim parametrem wywołać DashesEveryNthPos() ?

    Dodano po 1 [godziny] 7 [minuty]:
    (string Text, short pos - mam problem z tą drugą wartością)

    0
  • #7 17 Sie 2013 16:32
    the_fifth_horseman
    Poziom 32  

    Trollek123 napisał:
    Błąd
    Unable to cast object of type 'System.Windows.Forms.Button' to type 'System.Windows.Forms.TextBox'.

    dotyczy TextBox Sender = (TextBox)sender;
    fakt faktem instrukcja generowania klucza wychodzi spod buttona generuj licencje. ma to jakieś znaczenie ?
    Ano ma, bo obydwie funkcje obsługujące zdarzenia zakładają że wywołujący je obiekt to TextBox - tak jak napisałeś na początku.
    Z tego co widzę możesz spokojnie je pominąć i korzystać bezpośrednio z DashesEveryNthPos().

    Cytat:
    Dobra to ja wkleiłem źle kod teraz pytanie z jakim parametrem to wywołać??
    DashesEveryNthPos(?????)
    (string Text, short pos i mam problem z tą drugą wartością

    Funkcja zwraca Text z kreską wstawioną co Pos znaków. W twoim przypadku jest to 5. Kto inny może chcieć 3, 7 albo jeszcze inną wartość.

    0
  • #8 17 Sie 2013 18:09
    Trollek123
    Poziom 10  

    Sorry, ale coś nie działa już wpisuje tak ("-", 5) albo tak: (textbox7.Text, 5); i nic się nie dzieje.
    Z powiększeniem liter na duże nie było problemu, zastosowałem textBox7.CharacterCasing = CharacterCasing.Upper; i poszło a to nie chce - przywiesza się na chwilę i dostaję ten sam klucz, bez kresek :(

    Dodano po 24 [minuty]:

    Przyrównałem to do Textbox7.text, skasowało mi wszystko. W polu pojawiło się 5- za "" wstawiłem "5", i gdzie tu logika ?

    Dodano po 3 [minuty]:

    Przy wstawieniu "-", 5 wogóle czyści mi pole klucza, a tak chyba nie powinno być - powinno raczej dodać kreski.

    0
  • Pomocny post
    #9 17 Sie 2013 21:35
    the_fifth_horseman
    Poziom 32  

    Tak jak już wyjaśniłem, funkcja zwraca podany tekst z powstawianymi co n znaków kreskami. Wszystkie uprzednio istniejące w ciągu kreski są usuwane, co powinno być chyba oczywiste.

    Cytat:
    przyrównałem to do Textbox7.text, skazowało mi wszystko w polu pojawiło się 5- za "" wstawiłem "5"
    Operatory logiczne równości == i nierówności >=, != oraz <= są czymś całkowicie odmiennym od przypisania - operatora = .
    Cytat:
    i gdzie tu logika ?
    Nie w kolegi postępowaniu.
    Cytat:
    przy wstawieniu "-", 5 wogóle czyści mi pole klucza a tak chyba nie powinno być powinno raczej dodać kreski
    Tak dokładnie powinno być. Podałem krótki i wyraźny opis jak działa napisana funkcja, co ignorujesz podając argumenty na chybił-trafił i oczekując że otrzymasz poprawny wynik. Jest takie powiedzenie, "śmieci na wejściu, śmieci na wyjściu".

    Funkcja usuwa z podanego ciągu tekstowego kreski, po czym dodaje nowe w co 5-tej pozycji w ciągu (nie licząc zerowej). Napisałeś jasno:
    Cytat:
    rozdzielony dodatkowo "-" co piątą pozycję
    Ponieważ podany przez ciebie na wejściu ciąg nie zawiera 5 lub więcej znaków, żadne kreski nie są dodawane. Ponieważ ciąg ten składa się wyłącznie z kresek, wyjściem będzie pusty ciąg.

    Jeżeli upierasz się aby operować na tekście z textboxa zamiast na kluczu przed wpisaniem go do textboxa, wywołaj funkcję w następujący sposób.
    Kod: Csharp
    Zaloguj się, aby zobaczyć kod


    PS. Przepraszam jeżeli to zabrzmi bezczelnie, ale twoja postawa zaczyna mnie denerwować. Podstawą do uznania reklamacji jest kopia potwierdzenia zapłaty - dostałeś za darmo kluczowy fragment rozwiązania, resztę możesz zrobić samemu jeżeli tylko masz blade pojęcie o programowaniu w C# .

    U mnie funkcja działa zgodnie z założeniami jeżeli jest poprawnie wywołana, za twoje błędy i modyfikacje nie ponoszę odpowiedzialności - podobnie za to, że automagicznie nie spełnia oczekiwań o których wcześniej nie pisnąłeś ani słowem.

    0
  • #10 17 Sie 2013 23:55
    Trollek123
    Poziom 10  

    the_fifth_horseman napisał:
    Jeżeli upierasz się aby operować na tekście z textboxa zamiast na kluczu przed wpisaniem go do textboxa, wywołaj funkcję w następujący sposób.

    Kod C# - [rozwiń]
    Textbox7.Text=DashesEveryNthPos(Textbox7.Text, 5);



    PS. Przepraszam jeżeli to zabrzmi bezczelnie, ale twoja postawa zaczyna mnie denerwować. Podstawą do uznania reklamacji jest kopia potwierdzenia zapłaty - dostałeś za darmo kluczowy fragment rozwiązania, resztę możesz zrobić samemu jeżeli tylko masz blade pojęcie o programowaniu w C# .

    U mnie funkcja działa zgodnie z założeniami jeżeli jest poprawnie wywołana, za twoje błędy i modyfikacje nie ponoszę odpowiedzialności - podobnie za to, że automagicznie nie spełnia oczekiwań o których wcześniej nie pisnąłeś ani słowem.


    Więc tak:
    chciałbym zaznaczyć że jako takie pojęcie o programowaniu w C# posiadam chodzi głównie o to że nie przerobiłem problemu do końca i owszem przypisana wartość textbox była do drugiej funkcji, problem polegał na tym że próbowałem na różne sposoby bez przypisania z zapisem DashesEveryNthPos(textBox7.Text,5); i nic nie wychodziło.
    z kolei z przypisaniem faktycznie było tylko ("-", 5);

    Czasem po prostu człowiek z roztargnienia nie funkcjonuje poprawnie za co przepraszam forumowiczów, złożyły się na to różne czynniki życia prywatnego. Dziękuje za wszelkie poprawki i cierpliwość do mojego dzisiejszego marudzenia.

    Dodano po 1 [godziny] 19 [minuty]:

    Dla głodnych wiedzy można to też rozwiązać w inny sposób przy okazji wycinając krzaki, chwasty albo coś:)
    dopytane na innym forum.

    string text = @"an&d%d@ks\#*dsflk";

    string wynik = System.Text.RegularExpressions.Regex.Replace(text, @"[=/?\\|}{';:()*&^%$#@!~ ?]", "");
    string w2 = System.Text.RegularExpressions.Regex.Replace(wynik, ".{4}", "$0-");

    Pozdrawiam

    0