Diskuze: přepínání formulářů
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Třeba pomocí něco takovéhleho:
void MetodaPriKliknuti()
{
this.Visible = false
var dialog = new Form2();
dialog.Show();
this.Visible = true;
}
noo to mi dělá to co přesně nechci aby to dělalo, ale (omlouvám se za
formulaci problému) ve zkutečnosti mám formuláře 3 dá se to předělat na
dva ale momentálně mám 3, vysvětlim problém, mám okno ve kterém se mi
mění hodnoty podle smáčknutí tlačítka na určité hodnotě čekněme 5 se
mi má zapnout další formulář a ten s hodnotami se má skrýt,
zneviditelnit, zablokovat, prostě aby nebylo možné v něm dále pracovat,
poté se spustí další formulář s více tlačítky kde se odečítají
hodnoty kterými se opět načte třetí formulář který po smáčknutí
tlačítka má spustit první formulář,* ve kterém jsou ale stále ty hodnoty
které tam byly..*.
což přesně tyhle příkazy neudělají protože sice otevřou ten formulář
ale vynulovaný...
mám to také metodou new ale myslím že přesně to tam
dělá neplechu, chtěl bych se proto zeptat, jestli netušíte jak ten
formulář po případě v tom prvním vypnout tlačítka a tím třetím ty
tlačítka zas zapnout nevadí když to bude vidět, stačí, když bude
nějakým způsobem znemožněno v ovládání prvního formuláře, než se
zavře třetí formulář...
(na prvním formuláři mám form2 form = new form2(); form.show();
Hide();
na druhém form3 form = new form3(); form.show(); Close();
a na třetím nevím co nastavit aby se mi zobrazil první formulář s daty co
v něm byla (opravdu myslím že za to může to new) ale nevim čim by to šlo
nahradit) )
Tvůj příběh je moc dlouhý na to, aby se ho snažil pochopit. Ale na základě poslední části myslím, že k řešení tvého problému by mělo stačit vytvořit (po vytvoření rodičovského okna) pomocí new okno, které bude součástí hlavního okna (globálně) a to otevírat pomocí Show nebo ShowDialog a pouze zavírat, ale nelikvidovat.
public partial class Form1 : Form
{
private Form2 dlg;
public Form1 ()
{
var dlg = new Form2();
}
private void Otevri()
{
dlg.ShowDialog();
Pokud to nemusí být přímo různé formuláře, můžeš dát přes sebe v
1 formu několik panelů, z nichž by každý reprezentoval obsah 1 okna.
Musíš to ale udělat tak, aby se ti ty panely nevložily do sebe, takže
každý z nich přetáhneš kousek vedle od těch ostatních a ve vlastnostech
mu nastavíš stejnou pozici jako ostatním.
Jinak na tohle je mnohem lepší WPF, pokud nemáš specifický důvod dělat ve
Winforms, měl bys uvažovat o přechodu, usnadňuje to spoustu věcí Jinak WPF je novější a má
nahradit deprecated Winforms.
Souhlas s czubehead co se týče WPF
ale i když je tvá konstrukce poměrně krkolomná - co svědčí spíš o
špatném návrhu tak ohledně otvírání a zavírání oken aby to fungovalo
jak ty chceš by to mělo vypadat nějak takhle:
v hlavnim formuláři:
private otevriForm2()
{
//vytvoreni okna 2
Form2 form2=new Form2();
//minimalizuje okno 1
this.Hide();
//otevre okno 2 jako dialogove - s oknem 1 se neda manipulovat
form2.ShowDialog();
//zde pokracuje po zavreni okna 2
//kdyz se pred tim zavrelo okno 3
//otevre zpet okno1
this.Show();
//okna 2 a 3 jsou zavrena , okno 1 opet aktivni
}
ve formuláři Form2
private otevriForm3()
{
//vytvoreni okna 3
Form3 form3=new Form3();
//minimalizuje okno 2
this.Hide();
//otevre okno 3 jako dialogove - s oknem 1 ani 2 se neda manipulovat
form3.ShowDialog();
//zde pokracuje po zavreni okna 3
//zavre okno 2 a skoci do metody "otevriForm2()"
//hned za volani metody "form2.ShowDialog();"
this.Close();
}
Zobrazeno 6 zpráv z 6.