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#] - pobieranie danych z dynamicznych textbox'ów

tohimon 08 Lis 2012 16:15 3480 16
  • #1 08 Lis 2012 16:15
    tohimon
    Poziom 10  

    Na formie mam combobox, z którego wybieram interesującą mnie pozycję. Następnie dynamicznie na Panel1 tworzone są trzy texbox i button.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Problem polega na tym, że otrzymuję błąd w trakcie naciśnięcia klawisza:
    "Nie można rzutować typu system.windows.forms.label na typ system.windows.form.textbox" i nie mam zielonego pojęcia gdzie popełniłem błąd bo kompilacja przebiega bez problemu. Kod pisałem w oparciu o temat: [C#]odczyt wartości z textboxów tworzonych dynamicznie".

    Zastanawiałem się nad tym kodem sprawdzającym ale nie wiem po co te "Buuu"

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Z góry dziękuję za pomoc.

    0 16
  • #2 08 Lis 2012 16:28
    marcinj12
    Poziom 40  

    Na pierwszy rzut oka widać, że problemem jest ta linijka:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Skoro w panelu masz textboxy i lablele, nie możesz traktować każdej kontrolki jako textboxa. O tyle dziwne, że w pętli wyżej zrobiłeś to dobrze :)
    Ja bym może nieco inaczej zapisał:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Edit: widzę że wrzuciłem tą samą odpowiedź ;)
    "Buuu" w tamtym kodzie - czy X w tym - to po prostu jakaś akcja do wykonania na znalezionej kontrolce. :)

    0
  • #3 08 Lis 2012 16:34
    tohimon
    Poziom 10  

    Właśnie testowałem z "Buu" i nadal mam ten sam błąd dla tego też kończą mi się koncepcje :(

    a można tak zrobić, żeby w trakcie wykonywania:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    sprawdzał czy trafił na textbox albo wartość z textbox zapisywał do tablicy [3] potem tylko kod do odczytania wartości i wyświetlenia

    ok zrobiłem tak:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    ale MessageBox wyświetla mi "t_box3"

    Po zmianie t_box.Name na t_box.Text mam tylko tekst z pierwszego textboxa.
    Czyli teraz kwestia jak łączyć tekst z kilku.

    Przepraszam, że tak piszę ale cały czas modyfikuję kod szukając rozwiązania i napotykam na kolejne błędy więc może ktoś w którymś miejscu zwróci uwagę gdzie robię żle.

    Przerobiłem kod "sprawdzający" bo we wcześniejszym rozwiązaniu switch przerywał po pierwszym sprawdzeniu ze względu że znalazł pasującego textboxa dla tego zmieniłem na taki kod:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    MessageBox zwraca mi trzy razy wartość w trzeciego textbox np: "3 3 3".

    0
  • Pomocny post
    #4 08 Lis 2012 17:47
    marcinj12
    Poziom 40  

    Nie wystarczy Ci zrobić coś takiego?

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #5 08 Lis 2012 17:53
    tohimon
    Poziom 10  

    Działa dziękuję za pomoc a tyle kombinowałem od rana :)

    Jeśli bym chciał wynik zapisać w Label to massegebox zamieniam na lab?

    Nie chcę być marudny ale czy da się w łatwy sposób zablokować przy textboxie w którym wprowadzam PESEL tylko do cyfr?

    0
  • Pomocny post
    #6 08 Lis 2012 18:27
    marcinj12
    Poziom 40  

    tohimon napisał:
    Jeśli bym chciał wynik zapisać w Label to massegebox zamieniam na lab?
    Tak.

    tohimon napisał:
    czy da się w łatwy sposób zablokować przy textboxie w którym wprowadzam PESEL tylko do cyfr?
    Możesz zastosować MaskTextBox z odpowiednią maską albo pozwolić tylko wprowadzić cyfry: w zdarzeniu KeyPress textboxa:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    Nie zapobiegnie to np. wklejeniu danych tekstowych przez kopiuj-wklej, więc i tak przed zapisem musisz zrobić dodatkową walidację, albo obsłużyć dodatkowo zdarzenie TextChanged -tak w jednym jak i w drugim możesz użyć wyrażeń regularnych albo próbować parsować na jakiś wystarczająco duży całkowity typ liczbowy np. na typ Int64 (Int64.TryParse(...))

    0
  • #7 08 Lis 2012 18:33
    tohimon
    Poziom 10  

    Jak taką opcję zastosować do textboxa wygenerowanego dynamicznie? U mnie PESEL wpisywany jest do t_box3 i jak wpisuje kod mam informację, że taki element nie istnieje.

    0
  • Pomocny post
    #8 08 Lis 2012 18:39
    marcinj12
    Poziom 40  

    tohimon napisał:
    Jak taką opcję zastosować do textboxa wygenerowanego dynamicznie?
    A tutaj o czym Ci pisałem?? Pamięć jednodniowa?? ;)

    0
  • #9 08 Lis 2012 18:45
    tohimon
    Poziom 10  

    No tak :) myślałem że to tylko do przycisków :D

    0
  • Pomocny post
    #10 08 Lis 2012 23:21
    gaskoin
    Poziom 38  

    marcinj12 napisał:
    Nie wystarczy Ci zrobić coś takiego?
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    zamiast ifowania można z linq wyciągnąć kontrolki typu jaki nas interesuje

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #11 09 Lis 2012 22:59
    tohimon
    Poziom 10  

    Przerobiłem trochę kod i zamiast MessageBox dane zapisuję w Label dodatkowo wprowadziłem zliczanie kliknięć i dodawanie nowych labeli jeden pod drugim. :)

    Czy w kodzie który mi podałeś wcześniej mogę sprawdzać czy Textbox jest pusty (w tedy label nie zostanie dodany i wyskoczy błąd).

    kod w tej chwili wygląda tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #12 09 Lis 2012 23:05
    marcinj12
    Poziom 40  

    tohimon napisał:
    Czy w kodzie który mi podałeś wcześniej mogę sprawdzać czy Textbox jest pusty (w tedy label nie zostanie dodany i wyskoczy błąd).
    Po prostu sprawdź w odpowiednim miejscu za pomocą if'a czy t_box.Text = "".

    0
  • #13 10 Lis 2012 03:58
    tohimon
    Poziom 10  

    Ok udało się :) po kilku godzinach ale działa. Dodatkowo sprawdzam długość tekstu po złożeniu z textbox'ów i jeśli warunek jest spełniony dodaję Laba :)

    jak po osiągnięciu konkretnej ilości klików wyłączyć klawisz. (zliczanie mam opanowane) Próbowałem z takim kodem (jednak nie działa):

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Próbowałem również z takim kodem:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    ale wyłączyłem całą aplikację :D

    Teraz zostaje mi już tylko dopisać usuwanie wpisów z panelu, i tak się zastanawiam czy nie zrobić zamiast Label checkbox'ów. Po zaznaczeniu usuwałbym wybrany. I tu się zastanawiam nad jedną kwestią: czy nie wpisywać tego do tablicy tzn: położenia i treści wtedy po usunięciu jakiegokolwiek elementu tablica miała by funkcje sort i dynamicznie byłaby wyświetlana na panelu.

    0
  • #14 10 Lis 2012 10:34
    marcinj12
    Poziom 40  

    tohimon napisał:
    Próbowałem z takim kodem (jednak nie działa)
    Co konkretnie nie działa? Sprawdzałeś, czy ta zmienna zmienia swoją wartość?

    tohimon napisał:
    Teraz zostaje mi już tylko dopisać usuwanie wpisów z panelu, i tak się zastanawiam czy nie zrobić zamiast Label checkbox'ów. Po zaznaczeniu usuwałbym wybrany. I tu się zastanawiam nad jedną kwestią: czy nie wpisywać tego do tablicy tzn: położenia i treści wtedy po usunięciu jakiegokolwiek elementu tablica miała by funkcje sort i dynamicznie byłaby wyświetlana na panelu.
    Zamiast zwykłego panela użyj TableLayoutPanel albo zastosuj DataGridView.

    0
  • #15 10 Lis 2012 20:10
    tohimon
    Poziom 10  

    tak jak by przycisk1 nie widział bo wywala błąd ze nie istnieje jak będę miał chwilkę to usiądę i dokładnie napisze o co chodzi ... projekt w pracy zostawiłem i muszę poprosić kogoś żeby mi podesłał :D

    0
  • #16 10 Lis 2012 20:17
    marcinj12
    Poziom 40  

    Jak wpisujesz przycisk1 to w podpowiadanym menu go widzisz czy nie? Skoro Ci wygenerowało zdarzenia przycisk1_Click to i przycisk musi być widoczny. Sprawdź nazwę czy przypadkiem nie zmieniłeś na inną ew. wklej cały kod.

    0
  • #17 11 Lis 2012 00:39
    tohimon
    Poziom 10  

    Więc poprawiłem i napisałem taki kod:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Przy sprawdzeniu ilości kliknięć mam błąd:
    Error 1 'WindowsFormsApplication1.Form1.przycisk1_Click(object, System.EventArgs)' is a 'method', which is not valid in the given context

    Chodzi mi o to że jeśli ilość kliknięć przekroczy np.: 25 w tedy przycisk1 stanie się nieaktywny

    0