Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#] Dialog sluiten als de gebruiker naast de dialog klikt

Pagina: 1
Acties:

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17-11 11:45
Ben een beetje aan het spelen met C# en ik loop daarbij tegen een probleem aan. Ben aan simpele applicatie aan het maken die vanuit de systray wat zaken moet regelen. Meeste gaat prima, maar nu wil ik dat zodra ik met de linkermuisknop klik op het icoon dat er dan een dialog tevoorschijn komt:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
        private void iconClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                try
                {
                    new SymbolPane().ShowDialog();
                }
                catch (Exception ex) {
                    MessageBox.Show("Fout: " + ex.Message);
                }
            }
        } // iconClick


So far, so good. Maar nu wil ik graag dat zodra de gebruiker niet in de dialog klikt, maar ernaast dat dan de dialog weer verdwijnt. In SymbolPane.cs:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private void InitializeComponent()
        {
            ...
            this.LostFocus += new EventHandler(focusLost);
        }

...

        private void focusLost(object sender, EventArgs e)
        {
            MessageBox.Show("Focus verloren, proberen de boel te sluiten");
            //this.Close();
            //this.Dispose();
        }


Heb Close() en Dispose() even weggecommentariseerd, maar ook de MessageBox krijg ik niet te zien. Heb ik wellicht de verkeerde event ofzo?

Heb trouwens ook gekeken of deze methode wordt aangeroepen bij het event GotFocus, maar ook niet. Iemand?

Read the code, write the code, be the code!


  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17-11 11:45
Gevonden!

Je dient gebruik te maken van het Deactivate event:

C#:
1
this.Deactivate += New EventHandler(deactivateDialog);

Read the code, write the code, be the code!


Verwijderd

Je gebruikt ShowDialog(); dat wil zeggen dat het dialoogvenster actief blijft totdat het dialoogvenster wordt gesloten, m.a.w. het venster blijft actief. Gebruik Show() zodat je dit probleem kunt tekkelen. LostFocus en GotFocus zijn b.t.w. alleen geldig voor focus-wisselingen binnen je eigen app. dus een muisklik op het bureaublad zal weinig opleveren. Deactivate is denk ik een meer bruikbaar event; sowieso kun je dan ook ShowDialog() weer gebruiken. Het nut van Dispose() aanroepen ontgaat me overigens wel een beetje; tenzij je zeer veel resourcevretende toestanden gebruikt.

Zie net dat onze berichten elkaar kruisten. Maar vanwaar die Dispose()?

[ Voor 18% gewijzigd door Verwijderd op 26-07-2008 10:48 ]


  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17-11 11:45
Resources vrijmaken. Hoewel het in dit geval niet veel resources zijn vind ik het wel een goede gewoonte om gebruikte resources vrij te maken, maar daar kan ik fout in zijn.

Zal nog eens kijken naar de daadwerkelijke verschillen tussen Show() en ShowDialog().

Read the code, write the code, be the code!


Verwijderd

C# heeft anders een automatische garbage collect...dus behalve als je echt een enorm resource-vretend dialoogschermpje hebt is het niet 'echt nodig' :).