[C#] Hoe een dialog hidden maken

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
De titel klinkt heel triviaal, maar dat is het niet, zo lijkt het.

Ik ben een tooltje aan het schrijven waarin zich een main form bevindt, en een dialog. Dat dialog ga ik weergeven met de ShowDialog() methode. Vervolgens zit er op dat dialoog een knop "background" die de hele zwik in de system tray gooit.

Dat doe ik op de volgende manier:
C#:
1
2
foreach (Form form in Application.OpenForms)
   form.Visible = false;
Dat stuk werkt, twee forms worden hidden. Maar als ik op de trayicon dubbelklik, moet eigenlijk het omgekeerde gebeuren.

Wat is nou het probleem? Wat ik eerst constateerde, is dat de ShowDialog() aanroep returnt op het moment dat bovenstaande code wordt aangeroepen. Dat gebeurt bij zowel Visible op false instellen, als bij Hide() aanroepen. Dat lijkt me niet goed, want dan wordt het form volgens mij gesloten en niet verborgen. Tweede dat ik constateerde is dat als ik de forms weer wil unhiden, dan is Application.OpenForms.Count == 1, waarbij alleen het main form in die collection zit. Dus waar is dat dialog dan gebleven? De applicatie sluit ook niet. Hij staat volgens mij te wachten tot dat dialog op de een of andere manier sluit.

Dus, wat is hier aan de hand? Of doe ik het gewoon hartstikke fout?

日本!🎌


  • Riegstar
  • Registratie: Februari 2003
  • Niet online

Riegstar

Wadapatja!

Als je een form opent met ShowDialog() dan is het als het waren een modal-dialog geworden.
En omdat deze modal-dialog geopent is door de mainform, is de mainform de parent van de dialog en niet de application.
(ik weet niet helemaal zeker of het zo is)

  • TUX2K
  • Registratie: September 2001
  • Laatst online: 23-02 16:45
Waaom zet je de Visible niet gewoon weer op true ?

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 17-01 10:57

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
En omdat deze modal-dialog geopent is door de mainform, is de mainform de parent van de dialog en niet de application.
Wat wil je daar precies mee zeggen? Dat ie niet in Application.OpenForms moet staan? Maar daar staat ie vóór het hiden dus wel... maar erná alleen niet.
Waaom zet je de Visible niet gewoon weer op true?
Dat doe ik ook. En ik heb Show() geprobeerd, maar kennelijk zijn die twee hetzelfde, want ze doen ook hetzelfde.
Die doet alleen het main form hiden. Het dialog blijft dan gewoon staan...

Ik heb ondertussen ook geprobeerd DialogResult op Cancel te zetten bij het hiden, maar net als bij Hide() wordt het dialog dan disposed. Wat er in dat dialog gebeurt, geeft dan medogenloos een exception, want je kan geen controls updaten die niet bestaan. Toch gaat de help daar volledig tegenin:
The Close method is not automatically called when the user clicks the Close button of a dialog box or sets the value of the DialogResult property. Instead, the form is hidden and can be shown again without creating a new instance of the dialog box. Because of this behavior, you must call the Dispose method of the form when the form is no longer needed by your application.

[ Voor 41% gewijzigd door _Thanatos_ op 27-03-2006 17:07 ]

日本!🎌


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

En als je nu eens een EXTRA knop invoert voor dat doel die geen DialogResult heeft.
[OK] [HIDE]

ASSUME makes an ASS out of U and ME


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 23-12-2025

_Thanatos_

Ja, en kaal

Topicstarter
En wat staat er in mijn topicstart:
Vervolgens zit er op dat dialoog een knop "background" die de hele zwik in de system tray gooit.
Die heeft dus geen DialogResult.

日本!🎌


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 14-02 12:54
En als je bij het dubbelklikken op het systrayicon gewoon weer .Show() doet? Volgens mij moet ie dan weer gewoon op de juiste positie zichtbaar worden.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack

Pagina: 1