Hide() zamiast zamykania programu - nie działa

Hide() zamiast zamykania programu - nie działa
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
        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ć.

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
             NotificationIcon1.Visible = true;
             this.WindowState = FormWindowState.Minimized; //this jako Form
             this.ShowInTaskbar = false;
  • Rejestracja: dni
  • Ostatnio: dni
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

Kopiuj
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?

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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

  • Rejestracja: dni
  • Ostatnio: dni
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.

  • Rejestracja: dni
  • Ostatnio: dni
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ę.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
j_s_r_n napisał(a)

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

Kopiuj
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().

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.