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

c# Łączenie kilku textBox-ów w jedną całość i wysyłka na e-mail

21 Kwi 2012 22:49 3339 15
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 39  
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    ...i tak dalej
  • Użytkownik usunął konto  
  • Poziom 39  
    Nie rozumiem o co chodzi, ale może o :
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    ?
  • Poziom 22  
    Jeśli nie chcesz by było widać textBox3 to po co go umieszczać na formie ? Nie lepiej od razu wysłać ciąg znaków ?

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
  • Poziom 38  
    A tak?

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    dopisujesz tylko kolejne boxy do kolekcji.
    Po co Ci aż tyle textBoxów do wiadomości ?
  • Użytkownik usunął konto  
  • Poziom 38  
    Tego się tak nie robi.

    Tworzysz obiekt użytkownika, ze wszystkimi właściwościami (imię nazwisko itd) przeciążasz mu metodę ToString() tak, żeby zwracała to co tam sobie chcesz (imię: nazwisko: itd)

    Na formie robisz sobie bindingSource którego źródłem jest obiekt użytkownika i do poszczególnych textboxów bindujesz sobie poszczególne właściwości obiektu.

    Na końcu kod wtedy wygląda tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Gdzie m_User to instancja obiektu użytkownika, który jest podpięty do bindingsource'a. Takie sklejanie stringów to se można wsadzić wiadomo gdzie:) nie dość, że kod jest paskudny, to dodatkowo jest niepotrzebny.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    to jest Ci niepotrzebne, przecież bodyBuilder będzie stringiem, tym samym co sum więc możesz użyć sum (choć Twoje rozwiązanie nie ma za bardzo sensu).
    bodyBuilder to nazwa instancji, klasa nazywa się StringBuilder i jak już się uparłeś na sklejanie stringów operatorem +, czego się nigdy nie robi, to jest Ci nie potrzebna.
  • Użytkownik usunął konto  
  • Poziom 22  
    gaskoin napisał:

    Takie sklejanie stringów to se można wsadzić wiadomo gdzie:) nie dość, że kod jest paskudny, to dodatkowo jest niepotrzebny.

    Eee tam nie przesadzaj, widać że kolega nie jest zbytnio ogarnięty w OOP, a Ty mu takie rzeczy piszesz :P żeby pisać programy tak jak mówisz to jednak trzeba już być w tym trochę wyrobionym (na początku każdy chyba łączył stringi j/w) :)

    A co do tutoriali to nie polecam, większość które widziałem nie wychodzi poza łączenie stringów i byle jakie definicje klas, interfejsów, polimorfizmu itp. (Nie mówiąc już o bardziej złożonych wzorcach programistycznych) Żeby pisać programy tak jak pisze gaskoin potrzeba solidnej książki do platformy .NET, która zaprezentuje podstawy i wprowadzi w OOP.

    Z literatury po polsku to jedyna która mi przypadła do gustu to http://helion.pl/ksiazki/c-i-net-stephen-c-perry,cshnet.htm

    Od 2 lat korzystam wyłącznie z książek ang. i bardzo polecam.
  • Poziom 18  
    Parę rzeczy, żeby Cię nakierować ;)

    1. Klasa - Uzytkownik
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    2. W klasie Uzytkownik przesłaniasz metodę ToString()
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    3. Bindowanie:
    - zapoznaj się z klasą BindingSource (jest też w postaci kontrolki, którą można dodać do formatki),
    - zapoznaj się z metodą textBox1.DataBindings.Add().

    Jakiś ogólny przykład, żeby było wiadomo o co biega:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    4. Warto żebyś doczytał, czym jest przesłonięcie metody (punkt 2), a także zobacz na msdn informacje na temat klasy StringBuilder (przyda się do zwrócenia tekstu w punkcie nr 2).

    Ogólnie:
    Tworzysz obiekt klasy Uzytkownik -> podpinasz go pod obiekt BindingSource, a następnie podpinasz obiekt BindingSource (a konkretnie jego wybrane właściwości) pod kolejne TextBox'y. Później już tylko korzystasz z metody ToString(), która zwrócić tekst jaki potrzebujesz.

    Teraz kolej na Twoją inicjatywę ;) Poszukaj informacji na dane tematy i powinieneś dać sobie rady. Jak coś to pytaj ;]
  • Poziom 38  
    Czemu wyrobionym ?

    Jest to dość proste i wygodne, a wygląda to mniej więcej tak:

    1. Tworzysz sobie obiekt, który opisuje Twojego użytkownika:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    2. W designerze wkładasz sobie z toolboxa na formę obiekt BindingSource (pojawi się na takim dodatkowym pasku na dole).

    3. Klikasz nań i rozwijasz okienko Properties (Właściwości). Szukasz tam (jest ich bardzo mało :) ) takiej właściwości jak DataSource. Rozwijasz listę, nie ma nic do wyboru więc klikasz "Add project Data Source...".

    4. W okienku które się pojawi zaznaczasz object i klikasz next. Z listy jaka się wyszukujesz obiekt który wyżej stworzyłeś i klikasz Finish.

    5. "Konfiguracja" obiektu BindingSource zakończona, teraz aby przybindować property obiektu (to te "cuda" z get i set) User do kontrolki, klikamy na odpowiedni textbox, np za ten odpowiedzialny za imię i rozwijamy okienko Properties. Na górze powinna być taka właściwość jak (DataBindings), będzie ona zwinięta. Rozwijamy i przy właściwości "Text" rozwijamy nasz bindingsource i wybieramy odpowiednią właściwość (Firstname lub Imie, w zależności jak to tam sobie nazwaliśmy).

    6. To samo robimy dla wszystkich textboxów. Warto przejrzeć możliwości Advanced z bindowania, często przydaje się ustawienie bindowania na "OnPropertyChanged", ale narazie się tym nie przejmuj.

    7. W kodzie okienka trzeba zrobić małą modyfikację. Po pierwsze dodajemy zmienną prywatną:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    W konstruktorze dodajemy po InitializeComponents():

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Kod przy wysyłaniu maila będzie wtedy taki, jak napisałem w poprzednim poście.

    8. Można też nie trzymać referencji do Usera (czyli nie używać zmiennej m_User). Wtedy konstruktor ma wyglądać tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    A wyciągnięcie Usera z binding sourca tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Bindowanie jest o tyle fajnym sposobem, że nie trzeba się martwić o jakieś przepisywania wartości. Wyczyszczenie formularza jest banalnie proste bo wystarczy zresetować bindingsource w dwóch linijkach zamiast ręcznie wpisywać nulle czy string.Empty do miliona kontrolek.

    Ktoś widzę mnie uprzedził, ale:

    Mad. napisał:
    zobacz na msdn informacje na temat klasy StringBuilder (przyda się do zwrócenia tekstu w punkcie nr 2).


    Tu lepiej chyba użyć formatowania. No i bindowanie prościej z designera zrobić.
    Jeszcze takie info, które może Ci się przyda w przyszłości. Z niewiadomych nikomu powodów, VS nie obsługuje więcej niż 5 bindowań z poziomu designera, warto wtedy wiedzieć jak to zrobić "z palca" :)

    Jak coś niejasne to pytać :)
  • Poziom 22  
    gaskoin napisał:
    Czemu wyrobionym ?

    Jest to dość proste i wygodne


    Dla osoby która dopiero zaczyna programowanie na pewno nie jest, tak samo jak nie trzymanie logiki w code-behind ale to już inny temat.