Hide() zamiast zamykania programu - nie działa

0

Chcę by program chował się do system traya, zamiast wyłączać. Przez google znajdywałem wiele rozwiązań, jak np:

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
        e.Cancel = true;
        Hide();
        }

ale żadne nie działa - program po kliknięciu na [x] nadal się wyłącza, zamiast tylko chować.

0

A masz NotifyIcon?
Bo z powietrza nie da się schować programu do tray'a.
Najpierw dodajesz/ustawiasz NotifyIcon, potem

             NotificationIcon1.Visible = true;
             this.WindowState = FormWindowState.Minimized; //this jako Form
             this.ShowInTaskbar = false;
0

Mam notifyIcon.

Gdzie i po co mam wpisać to, co podałeś?
Program na taskbarze się nie pojawia, jest tylko w system tray ikonka - to ustawiłem w Properties Form1 i działa ok.
Użytkownik może chować okienko programu przez Hide z contextmenu, ale kliknięcie na krzyżyk zamyka go, zamiast schować.

Oto cały kod klasy Form1, może pomoże

public partial class Form1 : Form
    {

        public Form1()
        {
        InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        
        }
        
        // to nie dziala:
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
        e.Cancel = true;
        Hide();
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
        Show();
        Activate();
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

        }

        private void restoreToolStripMenuItem_Click(object sender, EventArgs e)
        {
        Hide(); // Hide z context menu ukrywa
        }

        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
        Close(); // Exit z context menu zamyka
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {

        }
    }

Może coś w Properties Form1 ustawiłem nie tak jak trzeba?

0

Kod w porządku. Bałbym się tylko tego:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
        e.Cancel = true;
        Hide();
        }

private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
        Close(); // Exit z context menu zamyka
        }

Bo Close() wywołuje FormClosing(object sender, FormClosingEventArgs e)

Upewnij się tylko czy metoda Form1_FormClosing jest wpięta w event(czy kod się w ogóle wykonuje), np. breakpointem

0

No właśnie wygląda na to, że nie jest wpięta. Co może być przyczyną?

[quote]Bo Close() wywołuje FormClosing(object sender, FormClosingEventArgs e)[/quote]
...i programu się nie zamknie, racja.

0

W okienku properties w trybie designera kliknij na taką błyskawicę pomarańczową, znajdź FormClosing i zobacz, czy jest puste, jeśli tak to wpisz/wybierz mu odpowiednią metodę.

0
j_s_r_n napisał(a)

Kod w porządku. Bałbym się tylko tego:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
        e.Cancel = true;
        Hide();
        }

private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
        Close(); // Exit z context menu zamyka
        }

Bo Close() wywołuje FormClosing(object sender, FormClosingEventArgs e)

Ale czego tu się bać? Wystarczy sprawdzić czy e.CloseReason == CloseReason.UserClosing i tylko w tym przypadku anulować.
Ponadto aplikację zamyka się przez Aplication.Exit(), a nie Form.Close().

1 użytkowników online, w tym zalogowanych: 0, gości: 1