Omdat ik niet wil dat als iemand op het kruisje drukt van een scherm een scherm zomaar sluit zonder (evt.) op te slaan en nog een laatste regeltje code uit te voeren heb ik het volgende gedaan.
Het form een nieuwe eventhandler gegeven voor FormCloseing (Occurs before the form is closed.)
Natuurlijk kom je in een oneindige loop als je in FormCloseing telkens vraagt ja, nee annuleren
Dus experimenteerde ik met een andere methode die ja/nee/annuleren koos en dan
this.close()
uitvoerde. de FormCloseing had dan een check of de CloseReason ApplicationExitCall of UserExitCall was. Helaas werkte dit niet omdat this.close() ook een UserExitCall genereerd. (vreemd zie ook: http://forums.microsoft.c...px?PostID=502448&SiteID=1 )
Maargoed, toen heb ik ipv this.close() maar expliciet het volgende gedaan:
e.Cancel = true zou het volgende moeten doen volgens intellisense
"get or set the value indicating that the event should be cancelled"
Dat interpreteer ik als, stel e.Cancel = true in om niet te het scherm te sluiten, maar e.Cancel = false om het scherm wel te sluiten.
Maar helaas gaat het event niet door met het scherm sluiten,
Dit lijkt me de meest logisch manier om op te berijken wat ik, maar helaas werkt het dus somehow niet zoals ik geplanned had
op google kan ik niets vinden behalve dingen als dit:
http://bytes.com/forum/thread589284.html
Die juist bevestigen dat het zou moeten werken zoals ik denk.
(Ik heb ook nog naar de MDI pagina gekeken helaas is die deze keer niet al te duidelijk: http://msdn2.microsoft.co...rms.form.formclosing.aspx )
Dus tsja, hoe sluit ik het scherm "soms" dmv van een event handler?
Edit: ik weet dat ik niet expliciet nogmaals cancel = false hoef te doen, maar dan is het wat duidelijker, en ook als ik dat stukje code weghaal helpt het niets, btw de false als 2e argument voor
CloseForm(this, new FormClosingEventArgs(CloseReason.ApplicationExitCall, false)); stelt ook al cancel op false in.
Het form een nieuwe eventhandler gegeven voor FormCloseing (Occurs before the form is closed.)
Natuurlijk kom je in een oneindige loop als je in FormCloseing telkens vraagt ja, nee annuleren
Dus experimenteerde ik met een andere methode die ja/nee/annuleren koos en dan
this.close()
uitvoerde. de FormCloseing had dan een check of de CloseReason ApplicationExitCall of UserExitCall was. Helaas werkte dit niet omdat this.close() ook een UserExitCall genereerd. (vreemd zie ook: http://forums.microsoft.c...px?PostID=502448&SiteID=1 )
Maargoed, toen heb ik ipv this.close() maar expliciet het volgende gedaan:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| private void btnClose_Click(object sender, EventArgs e) { //vragen wat er moet gebeuren en daarna sluiten CloseForm(this, new FormClosingEventArgs(CloseReason.ApplicationExitCall, false)); } private void CloseForm(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; btnClose_Click(new Object(), new EventArgs()); } else { e.Cancel = false; GlobalManager.removeListner(this); } } |
e.Cancel = true zou het volgende moeten doen volgens intellisense
"get or set the value indicating that the event should be cancelled"
Dat interpreteer ik als, stel e.Cancel = true in om niet te het scherm te sluiten, maar e.Cancel = false om het scherm wel te sluiten.
Maar helaas gaat het event niet door met het scherm sluiten,
Dit lijkt me de meest logisch manier om op te berijken wat ik, maar helaas werkt het dus somehow niet zoals ik geplanned had
http://bytes.com/forum/thread589284.html
Die juist bevestigen dat het zou moeten werken zoals ik denk.
(Ik heb ook nog naar de MDI pagina gekeken helaas is die deze keer niet al te duidelijk: http://msdn2.microsoft.co...rms.form.formclosing.aspx )
Dus tsja, hoe sluit ik het scherm "soms" dmv van een event handler?
Edit: ik weet dat ik niet expliciet nogmaals cancel = false hoef te doen, maar dan is het wat duidelijker, en ook als ik dat stukje code weghaal helpt het niets, btw de false als 2e argument voor
CloseForm(this, new FormClosingEventArgs(CloseReason.ApplicationExitCall, false)); stelt ook al cancel op false in.
[ Voor 6% gewijzigd door roy-t op 09-04-2008 23:02 ]