RE: ApplicationContext ještě jednou a lépe

Nakonec uveřejňuji následující text do samostatného příspěvku, trošku více jsem se rozepsal na otázku položenou v komentářích k příspěvku ApplicationContext ještě jednou a lépe. A také proto, že autor dotazu na sebe nezanechal kontakt(?) a tak jej nemohu s odpovědí dát lépe vědět.

Skrytí formuláře při startu aplikace

Ač trošku pozdě přicházím s odpovědí, přeci. Property Visible se nastavuje uvnitř vykonávání metody Application.Run() a to vždy na hodnotu true. Tudíž není možné spustit žádný formulář jako neviditelný. Podotýkám, že se stále bavíme o formuláři, nikoliv jen o zobrazení NotifyIcon.

Není však třeba zoufat, i toto má řešení, byť nevede přes ApplicationContext (nebo jsem jej jen nenalezl). V čem vlastně spočívá problém? Ten je v tom, že formulář při všemožném volání metody Hide() na malou chvilku problikne na obrazovce a to i v okamžiku, kdy se budeme snažit přepsat metodu OnShow.

Řešením tak je umístit formulář v události Load na pozice mimo obrazovku a v metodě OnShow jej následně skrýt. Samozřejmě nesmíme zapomenout na to, jej při následném požadavku na zobrazení napozicovat na určené místo. Např. při doubleclick na NotifyIcon. Osobně se mi líbí myšlenka napozicování formuláře na hodnoty

Left = int.MinValue;Top = int.MinValue;

Snad tyto informace pomohou a dostatečně jsem zodpověděl položenou otázku.

5 Comments

  • frankstein said



    <p>Nesledoval som debatu od zaciatku, ani niesom najsam expert na winforms, ale mam jednu otazocku:</p>
    <p>Nepomozu ani metody SuspendLayout() a ResumeLayout()?</p>
    <p>Tieto mi uz pomohli pri zopar 'preblikavaniach'.</p>
    <p>Zdravim,</p>
    <p>F.</p>

  • said


    <p>Ahoj,</p>
    <p>  tady nejde o problikávání formuláře, ale o jeho zobrazení a následné skrytí (čímž dojde k probliknutí formuláře na obrazovce).</p>
    <p>  Určitě ale díky za snahu poradit.</p>

  • beran said



    <p>dobry den,</p>
    <p>ta odpoved byla na muj dotaz. diky za ni. ja jsem se nakonec dopidil k reseni pomoci ApplicationContext.</p>
    <p>(omluvte, prosim, pokud pouziji nektery vyraz nepresne, jsem teprve zacatecnik)</p>
    <p>jde o to nepredavat metode Application.Run jako parametr Form1, coz je standardni reseni, ktere Vam podsune VisualStudio, ale treba objekt context, ktery si vytvorim.</p>
    <p>mujAppContext context = new mujAppContext();</p>
    <p>Application.Run(context);</p>
    <p>no a v ramci tridy mujAppContext mam nadefinovany formular.</p>
    <p>Ma to ale hacek, pri zavreni formulare, neni uzavrena aplikace. Je to tedy treba osetrit.</p>
    <p>Jeste jednou diky a hodne zdaru.</p>

  • paul said



    <p>Ahoj,</p>
    <p>nastavit pozici okna mimo obrazovku, aby ji metoda Run nezobrazila je pekny figl. Sice se mi to moc nelibi, ale je to jedine reseni v .NET CF, na "velkem" .NET F je lepsi ten AppContext.</p>

  • purq said

    Četl jsem to jen zběžně, ale proč zobrazovat formulář, když ho potom budeme hned chtít zavřít? to ho nemůžeme zobrazit, teprv až ho budem potřebovat?

Add a Comment