Právě je čtvrtek 09. září 2010, 07:04

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 7 ] 
Autor Zpráva
 Předmět příspěvku: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: pátek 25. červen 2010, 19:06 
Offline
Nováček
Nováček

Registrován: pátek 25. červen 2010, 18:49
Příspěvky: 3
Ako zatvoriť bežiaci dialóg napr. "dlgFirmware" z hlavného okna ?

[code][/code]
private void Firmware_MenuItem_Click(object sender, EventArgs e)
{
FirmwareForm dlgFirmware = new FirmwareForm();
dlgFirmware.ShowDialog();
}


Nahoru
 Profil E-mail  
 
 Předmět příspěvku: Re: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: pátek 25. červen 2010, 20:12 
Offline
Nováček
Nováček

Registrován: pondělí 29. březen 2010, 13:15
Příspěvky: 27
Bydliště: Dubai & Jihlava
Co se Ti nezda?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: pátek 25. červen 2010, 22:28 
Offline
Pokročilý
Pokročilý

Registrován: čtvrtek 09. červenec 2009, 15:41
Příspěvky: 436
Pouziti ShowDialog blokuje vlakno, ze ktereho byl dialog spusten - ve Tvem pripade nejspis vlakno hlavniho okna.
Pokud bys pouzil Show, stacilo by jednoduse pouzit metodu Close().
Kód:
dlgFirmware.Close();


Pokud chces zavrit dialog z jineho vlakna, pouzij Invoke:
Kód:
dlgFirmware.Invoke((MethodInvoker)delegate() { dlgFirmware.Close(); });

_________________
How many Microsoft developers does it take to change a light bulb? None, they just change the standard to darkness.
Obrázek
Having a Cup<T> somewhere...


Nahoru
 Profil E-mail  
 
 Předmět příspěvku: Re: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: sobota 26. červen 2010, 09:36 
Offline
Nováček
Nováček

Registrován: pondělí 29. březen 2010, 13:15
Příspěvky: 27
Bydliště: Dubai & Jihlava
:lol:
Rikam ze nekdy je pochopit programovy jazik je lip nes lidcky :lol:

Promin, pochopil jsem tvou otazku uplne naopak .


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: pondělí 28. červen 2010, 07:02 
Offline
Nováček
Nováček

Registrován: pátek 25. červen 2010, 18:49
Příspěvky: 3
Ospravedlňujem sa za nepresne formulovanú otázku. Skúsim presnejšie popísať, čo chcem dosiahnuť:
V hlavnom okne beží timer. V jeho obsluhe kontrolujem stav nejakých premenných. Ak vyhodnotím stav "Error", chcem zatvoriť všetky okná / dialogové, MesageBoxy,../, okrem hlavného.

Problém by som rozdelil do týchto častí:

- ako v hlavnom okne zistiť, že je otvorené nejaké okno ? Dá sa použiť OwnedForms? Ako?
/ okná totiž otváram dynamicky v obsluhe kliknutia nejakého tlačítka /

- ak sa hlavné okno dozvie, že je otvorené nejaké okno, ako získa na neho nejaký handle

- ako sa s takým hadlom potom pracuje ?

Ďakujem Phobosovi, vyskúšam to.
Pozn. Bežiace okno otvorené pomocou ShowDialog neblokuje obluhu timera v hlavnom okne


Nahoru
 Profil E-mail  
 
 Předmět příspěvku: Re: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: pondělí 28. červen 2010, 10:09 
Offline
Pokročilý
Pokročilý

Registrován: čtvrtek 09. červenec 2009, 15:41
Příspěvky: 436
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.

_________________
How many Microsoft developers does it take to change a light bulb? None, they just change the standard to darkness.
Obrázek
Having a Cup<T> somewhere...


Nahoru
 Profil E-mail  
 
 Předmět příspěvku: Re: Zatvorenie dialógu z hlavneho okna
OdeslatNapsal: pondělí 28. červen 2010, 12:49 
Offline
Nováček
Nováček

Registrován: pátek 25. červen 2010, 18:49
Příspěvky: 3
Podarilo sa mi to vyriešiť tak, že som si pri vytváraní okna zistil a uložil jeho handle hndFirmware = dlgFirmware.Handle a potom som okno v hlavnom okne / v obsluhe timera / zatvoril pomocou funkcie Dispose.

[code][/code]
if (FromHandle(hndFirmware) != null)
{
FromHandle(hndFirmware).Dispose();
}

Riešenie od Phobosa je samozrejme omnoho lepšie, je to presne to, čo som potreboval.

Vďaka


Nahoru
 Profil E-mail  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 7 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přeskočit na:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Český překlad – phpBB.cz

Google Pagerank - www.dotnetforum.czGoogle Pagerank S-Rank - www.dotnetforum.czS-Rank JyxoRank - www.dotnetforum.czJyxoRank


Valid XHTML 1.0 Transitional