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ć
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
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?
Strona 1 / 1