Byla by to poměrně zajímavá statistika, nechce ji někdo udělat? Zařídíil bych mu readonly přístup do tabulky textů diskusních příspěvků. Zvlášť číslo, kolik % příspěvků neobsahuje projev osvěžujícího druhu taktu páně Linharta, by bylo velmi zajímavé. Ale k věci - pan Linhart má pravdu, výše uvedené chyby spočívají především v tom, že voláte Show na třídě Form2 a nevytvoříte si od ní proměnnou. Pak nemáte kontrolu nad tím, kolik instancí se vytváří. Takže - typické modální okno (zobrazím, čekám než uživatel něco vyplní, a pak jedu dál) se dělá takhle:
Dim f2 As New Form2()
'předvyplnit hodnoty (buď přes komponenty, lépe na to mít nějaké vlastnosti)
f2.TextBox1.Text = "blabla"
'...
'zobrazit okno a počkat, než ho uživatel zavře (případně v ifu testovat DialogResult, jestli kliknul na OK nebo na Cancel atd.)
f2.ShowDialog()
'zpracovat výsledky (někam si je přiřadit například)
Me.Settings = f2.TextBox1.Text
'korektně zrušit okno (místo toho se dá celý tenhle
'kód obalit do usingu, jak ukazoval pan Linhart;
'mimo ten blok ale okno neexistuje a nesmíte se na něj odkazovat)
f2.Dispose()
Máte přesnou kontrolu nad tím, kdy se okno vytvoří, a kdy zanikne. Ideálně nikdy nesahejte na proměnné uvnitř okna, dělejte na to vlastnosti. Místo f2.TextBox1.Text dejte do třídy Form2 tohle:
Public Property Jmeno As String
Get
Return TextBox1.Text
End Get
Set (ByVal value As String)
TextBox1.Text = value
End Set
End Property
Pak na f2 nebudete šahat na TextBox, ale na vlastnost f2.Jmeno. Má to mimo jiné tu výhodu, že když budete chtít při nastavení jména udělat něco jiného, nebo to jméno najednou nebude v textboxu, ale třeba v listboxu, změníte to na jednom místě (ve Form2 a nikde jinde) a ne na padesáti jiných místech, odkud se na ten TextBox odkazujete. Stejně tak můžete chtít přidávat kontroly, jestli jméno je správné, jestli začíná velkým písmenem atd. Pokud potřebujete okno, které má být vidět déle než vykonání jedné metody (celá předchozí ukázka musí být v jedné funkci, jinak to postrádá smysl), pak si do okna, které to nové vyvolává, udělejte proměnnou a přiřaďte do ní New OteviraneOkno(). A jakmile ho nebudete potřebovat, zavolejte na něj Dispose (pak už s ním nejde nic dělat a musíte si vytvořit novou instanci - zase zavolat New OteviraneOkno()). Pokud to děláte jinak, zaděláváte si na problémy, které se dříve či později objeví. Jste začátečník a takhle to dělají všichni. Nadávek pana Linharta si nevšímejte.
|