Zamknięcie formy za pomocą przycisku X w prawym górnym rogu

0

Jak oprogramować przycisk żeby zamykał formę z pytaniem czy chcesz żeby była zamknięta? mógłby ktoś tak krok po kroku wyjaśnić?

3

Musisz podpiąć event FormClosing() do okna i w nim wywołać dialog MessageBox z pytaniem

private void Form1_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
    if(MessageBox.Show("Czy zamknąć", "ZAMYKANIE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
    {
        e.Cancel = true;
    }
}
0

dokładnie tak robie i nie działa... nawet okno messegeboxa nie wyskakuje. Wie ktoś dlaczego tak może być?

0

Musisz w opcjach okna przejść na zakładkę z eventami i podpiąć ten event do okna. U góry wybierasz "piorun" i szukasz eventu. Jeśli już napisałeś metodę to możesz dropdownem ją wybrać, jeśli nie, to klikasz dwa razy i się stworzy, a ty tylko będziesz musiał dopisać logikę.

form_closing_event.png

0

dzięki dziala. A jak to zrobić za pomocą kodu i gdzie ? można?

0

Można ale po co?

0

Można. W konstruktorze.

this.FormClosing += (s, e) => {
    e.Cancel = MessageBox.Show("Czy zamknąć", "ZAMYKANIE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No;
};
2

To już jest za pomocą kodu. designer generuje plik .deisgner.cs, możesz go podejrzeć klikając na pokaż wszystkie pliki albo chyba F7 (nie chce mi się sprawdzać). Tak więc to już jest w kodzie, tylko że automatycznie utworzonym.
Jeśli ręcznie się przypinasz do zdarzeń to pamiętaj żeby klasa którą przypinasz (do której należy metoda) miała taki sam lub krótszy czas życia niż klasa do której przypinasz. Inaczej musisz zdarzenie odpiąć (używając -= na tej samej metodzie) bo przypięte zdarzenie będzie podtrzymywało klasę do której należy przy życiu i może doprowadzić do memory leaków i odpalania zdarzeń w "usuniętych" poukrywanych po pamięci obiektach. Możesz tez użyć weak eventów. W kodzie powyżej nie ma takiego problemu bo metoda obsługi zdarzenia należy do tej samej instancji co zdarzenie.

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