Pekub píše:
- ako v hlavnom okne zistiť, že je otvorené nejaké okno ? Dá sa použiť OwnedForms? Ako?
Da, ale musis nejdriv nastavit
Owner oknu, ktere otviras...
Kód:
private void ShowForm(Form f)
{
f.Owner = this;
f.Show();
}
private void ShowDialogForm(Form f)
{
f.Owner = this;
f.ShowDialog();
}
//a pak v kodu misto Form2.Show():
this.ShowForm(new Form2());
this.ShowDialogForm(new FormXXXXX());
// Zavreni vsech vlastnenych oken (musi byt pusteno na UI vlakne):
foreach (Form f in this.OwnedForms) { f.Close(); }
Take muzes implementovat nejaky vlastni algoritmus...
Pekub píše:
Pozn. Bežiace okno otvorené pomocou ShowDialog neblokuje obluhu timera v hlavnom okne
Jasne,
ShowDialog totiz neblokuje cele vlakno, jen jeho distribuci zprav...
System.Windows.Forms.Timer bezi sice na stejnem vlakne jako UI, ale pouziva jinou distribuci zprav nez ShowDialog => funguje vyvolavani udalosti apod.
Pokud bys pouzival vice-vlaknovou architekturu (treba System.Threading.Timer), musel bys pouzit vyse uvedenou konstrukci s
Invoke.