Pole "zamknij" w notatniku

0

Witam, chcę napisać notatnik. Jestem początkujący, podstawy c++ miałem i podstawy znam, do nauki służy mi książka "visual studio 2013" Jacka Matulewskiego. Jest tam zadanie aby zrobić notatnik, wszystko jasne, lecz do momentu, gdy mam zdefiniować w klasie Form1 pole tekstZmeniony typu bool, którego wartość będzie ustalana na true w przypadku modyfikacji zawartości notatnika (pomocne będzie zdarzenie TextChanged komponentu TextBox). Jeżeli podczas zamykania formy jest ono równe false, komunikat z pytaniem nie zostanie pokazany.
Kombinowałem i utworzyłem :

         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dr = MessageBox.Show("Czy zapisać zmiany w edytowanym dokumencie?",
            this.Text,
            MessageBoxButtons.YesNoCancel,
            MessageBoxIcon.Question,
            MessageBoxDefaultButton.Button3);
            
            switch (dr)
            {
                case DialogResult.Yes: MessageBox.Show("Ctrl+O"); break;
                case DialogResult.No: break;
                case DialogResult.Cancel: e.Cancel = true; break;
                default: e.Cancel = true; break;
            }

        }
        


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            bool tekstZmieniony = true;
            if (tekstZmieniony)
            {
                Console.WriteLine("Czy na pewno zamknąć?");
            }
            else
            {
                Close();
            }
        }
    }
} 

Po odpaleniu programu, podczas wybrania z menu "Zamknij", program zamyka się bez względu na to czy coś napisałem czy nie, nie wyświetla komunikatu, co zrobiłem źle?

0

Przeczytaj na głos i przetłumacz nazwę metody, gdzie masz if (tekstZmieniony), a następnie porównaj z nazwą metody, gdzie masz komunikat.
Poza tym - na logikę - tekstZmieniony musi być polem klasy, a nie zmienną lokalną. Pomyśl dlaczego.

0

Nic Mi nie przychodzi do głowy.

0

No to pomyśl, że jesteś komputerem i dostałeś do uruchomienia taki program.
Przeanalizuj linijka po linijce co się dzieje, w którym momencie i dlaczego.

0

Wyświetla się wszystko. Lecz przyciski nie działają. Mam jeszcze pytanie, jak dodać metodę zdarzeniową do zdarzenia FormClosing.

Polecenie brzmi :
Przejdź do widoku projektowania i utwórz metodę zdarzeniową do zdarzenia FormClosing.
Nigdzie nie mogę znaleŹć FormClosing. Może to odnosi się do po prostu przycisku "Zamknij" w menu ?

0
bool tekstZmieniony = false; 

to powinno być w samej formie.
w zdarzeniu TextChanged robisz

textChanged = true;

W zdarzeniu FormClosing sprawdzasz czy tekst jest zmieniony:

 if(tekstZmieniony) {AaaaaJednakNieZamykajFormy();}

Jak zatrzymać zamykanie formy masz tutaj ładnie opisane: http://stackoverflow.com/questions/12409529/prevent-closing-a-winforms-window
Oczywiście w swojej metodzie zapisującej tekst ustawiasz

textChanged = false;

Co do znalezienia eventów - w designerze klikasz interesujący Cię element, domyślnie pokarze Ci się panel Properties,
jak naciśniesz na nim taką ikonkę jakby pioruna to zobaczysz eventy. 2xClick na evencie i VS z automatu wygeneruje Ci metodę.

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