Zapamiętywanie zawartości okien potomnych w aplikacji MDI. Jak to zrobić? [C Sharp]

Witajcie! Właśnie zaczynam moją przygodę z C# i .NET ponieważ w firmie muszę stworzyć bazę danych SQL z przyjaznym interfejsem działającym w środowisku Windows. Zamówiłem już książkę z Helionu "C# i .NET", Stephen C. Perry ([url=http://helion.pl/ksiazki/cshnet.htm]http://helion.pl/ksiazki/cshnet.htm[/url], dobry wybór?) i czekam na przesyłkę, ale chciałbym już zrobić jakąś część kodu. Otóż mam problem z zapamiętywaniem danych z formularzy przy przechodzeniu między nimi (nawigacja wstecz, dalej itp). Chyba już 3 dzień siedzę nad tym i nie mogę sobie poradzić (na razie głównym źródłem wiedzy o tworzeniu aplikacji okienkowych w C# są jakieś kursy internetowe czy fora dyskusyjne). A więc pokarzę to na przykładzie testowym (w mojej aplikacji będzie kilka formularzy, tu są tylko 3 okienka + 1 główne). Najpierw tworzę okienko główne: Domyślne okno [b]Form1.cs[/b] zmieniam na[b] OknoGlowne.cs[/b]. Jego właściwość [b]IsMdiContainer[/b] ustawiam na [b]True[/b] tak aby się stało oknem głównym. OknoGlowne.cs -> [img]http://img4.imageshack.us/img4/1098/16496948hi7.jpg[/img] Dodaję również menu z jedną opcją do wyboru: Uzytkownicy -> Nowy użytkownik (przypominam,że jest to początek aplikacji). Po kliknięciu na opcję Nowy użytkownik tworzy się okno potomne, które wcześniej stworzyłem ([b]DaneOsobowe.cs[/b]): [code] namespace Test { public partial class OknoGlowne : Form { public OknoGlowne() { InitializeComponent(); } private void dodajNowegoToolStripMenuItem_Click(object sender, EventArgs e) { DaneOsobowe do1 = new DaneOsobowe(); do1.MdiParent = this; do1.Show(); } } } [/code] Jak już wspominałem po kliknięciu na nowy użytkownik otwiera się okno potomne [b]DaneOsobowe.cs[/b]. Stworzyłem je wcześniej w trybie graficznym, ponieważ pisania "z palca" kompletnie nie wchodzi w grę (formularze będą bardzo rozbudowane). Dla przykładu wprowadziłem do niego 2 TextBoxy (na imię i nazwisko) praz 2 Buttony: Anuluj do zamknięcia 1 okna potomnego i Dalej aby przejść do kolejnego okna z formularzem ([b]Wiek.cs[/b]) DaneOsobowe.cs -> [img]http://img27.imageshack.us/img27/6479/59841624cy4.jpg[/img] No i tutaj pojawiają się schody. Przycisk Dalej ma otworzyć kolejne okno potomne ([b]Wiek.cs[/b]). Okno już stworzyłem graficznie, tylko nie wiem jak go wywołać. Gdy zrobię coś takiego: [code] namespace Test { public partial class DaneOsobowe : Form { public DaneOsobowe() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Wiek w = new Wiek(); w.Show(); } private void DaneOsobowe_Load(object sender, EventArgs e) { } } }[/code] gdzie zdarzenie [b]button1_Click[/b] jest wywoływane po kliknięciu na przycisk [b]Dalej[/b], to okno się otworzy. Tylko, że gdy wrócę jeszcze raz do okna [b]DaneOsobowe.cs[/b] i kliknę na dalej, to okno się tworzy na nowo i dane które tam wpisałem (wiek) nie są zapamiętywane. Napiszę teraz o [b]Wiek.cs[/b]. Stworzyłem tam jedno pole tekstowe, w którym trzeba wpisać wiek. Są również 2 przyciski: [b]<<< Wstecz[/b], który powoduje powrót do wpisywania danych osobowych (program musi pamiętać co było wpisane), oraz [b]Dalej >>>[/b], który przenosi do ostatniego okna. Chciałbym dodatkowo aby po kliknięciu w oknie [b]DaneOsobowe.cs[/b] to okno znikało ([b]this.Visible.false[/b]) i wyświetlało się właśnie okno [b]Wiek.cs[/b]. Wiek.cs -> [img]http://img80.imageshack.us/img80/8927/39177746jx1.jpg[/img] Ostatnie okno, które się pojawi (po kliknięciu na dalej w oknie [b]Wiek.cs[/b]) to podsumowanie, gdzie będą wyświetlone dane z wszystkich TextBoxów, CheckBoxów, ComboBoxów itp. tak aby sprawdzić poprawność wpisanych danych i dodać do bazy lub jeszcze wrócić do formularzy przyciskiem [b]<<< Wstecz[/b]. To jest niby łatwe, bo wystarczy nadać kontrolkom modyfikator public zamiast private. Podsumowanie.cs -> [img]http://img5.imageshack.us/img5/206/83678374ao6.jpg[/img] A więc podsumowując. Chodzi mi o to, żeby można było swobodnie przechodzić pomiędzy kolejnymi oknami (taki kreator dodawania) i po klikaniu na wstecz czy dalej dane w nich wpisane były pamiętane. Może to być tak, że po kliknięciu w głównym oknie Nowy użytkownik wszystkie te kontrolki się utworzą, ale tylko pierwsza będzie widoczna. Tutaj jest źródło projektu, który opisywałem (Test.rar): [url=http://chomikuj.pl/mw55/C+Sharp+Pub/Test.rar]http://chomikuj.pl/mw55/C+Sharp+Pub/Test.rar[/url] Będę bardzo wdzięczny za pomoc i przepraszam, za to, że nie operuję fachowym językiem typu klasy, kontenery, struktury, interfejsy itp, ale dopiero się uczę, A i tak nigdy nie nie będę programistą, bo jestem za cienki:) Pozdrawiam!

Odpowiedzi: 3

tylko jak to przekazywać. Chodzi mi o kawałek kodu, żebym wiedział jak to ruszyć
lukaszp
Dodano
05.02.2009 13:47:24
W oknie wywołującym utwórz sobie obiekt klasy DaneOsobowe, a potem go przekazuj do każdego kolejnego okna. Przekazuj poprzez metody, propertiesy, albo konstruktor (ale ten to tylko w jedną stronę). pozdrawiaMM
Marcin_Miga
Dodano
05.02.2009 10:59:05
Trochę ruszyłem temat, więc sam sobie odpowiem. Stworzyłem klasę publiczną Uzytkownik z takim oto kodem: [code] public class Uzytkownik { private string imie; private string nazwisko; private int wiek; //properties public string Imie { get { return imie; } set { imie = value; } } public string Nazwisko { get { return nazwisko; } set { nazwisko = value; } } public int Wiek { get { return wiek; } set { wiek = value; } } } [/code] W pierwszym oknie dialogowym (DaneOsobowe.cs) napisałem taki kod dla obsługi kliknięcia przycisku Dalej>>>: [code] Uzytkownik t = new Uzytkownik(); t.Imie = textBox1.Text; t.Nazwisko = textBox2.Text; Wiek w = new Wiek(); w.Show(); [/code] A więc wydaję mi się że działa set dla imienia i nazwiska i gdzieś sobie to w pamięci zapisuje. Ok. Wyświetla się okno do podania wieku. Tutaj pod przyciskiem Wstecz dałem taki kod: [code] DaneOsobowe do1 = new DaneOsobowe(); Uzytkownik t = new Uzytkownik(); t.Wiek = int.Parse(textBox1.Text); do1.Show(); [/code] No właśnie. Chyba niepotrzebnie piszę Uzytkownik t = new Uzytkownik(); bo nie wiem jak inaczej zapisać setem wpisany wiek. A więc nie wiem jak to zrobić, żeby tylko na początku obiekt klasy Uzytkownik i potem tylko do niego dopisywać coś. Jak otworzyć kontener na początku, a potem do niego dopisywać poszczególne rzeczy?
lukaszp
Dodano
04.02.2009 10:47:34
lukaszp
Dodano:
03.02.2009 21:05:02
Komentarzy:
3
Strona 1 / 1