Zamknięcie pliku

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Cześć.
Mam problem z tworzeniem aplikacji - notatnik w C#

Sprawa wygląda tak, że po naciśnięciu krzyżyka w celu zamknięcia mojej aplikacji wyskakuje komunikat: "Czy chcesz zapisać potrzebne dane?". Fajna sprawa, ale co jeżeli dokument jest pusty? Chciałbym, aby ten komunikat nie wyskakiwał w przypadku pustego arkusza. Próbuję realizować to zadanie na podstawie opisu z książki:

"Pytanie o zachowanie dokumentu nie ma sensu, jeżeli nie został on zmieniony
po otwarciu aplikacji lub po ostatnim zapisie na dysku. Dlatego warto w klasie
Form1 zdefiniować pole tekstZmieniony 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."

Kopiuj
public partial class Form1 : Form
    {
        bool tekstZmieniony = false;

Według tej instrukcji zdefiniowałem już w klasie Form1 pole tekstZmieniony, ale nie wiem co dalej ustawić :(

loominartz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Musisz napisać funkcję obsługującą zdarzenie TextChanged i tam ustawić wartość zmiennej na true.

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

To już wiedziałem, tylko w jaki sposób napisać tą funkcję? Zakładam, że

Kopiuj
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            tekstZmieniony = true;

nie wystarczy.

loominartz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Piszesz tę funkcję właśnie w taki sposób, musisz jeszcze przypisać ją do TextBoxa:

Kopiuj
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

Przypisałem tę funkcję do texboxa ale nie za pomocą tego kodu tylko klkając w Properties -> Events(nie wiem czy tu jest jakaś różnica)? Niestety po wciśnięciu krzyżyka, w przypadku pustego arkusza dalej wyświetla się ten komunikat. Coś tu nie działa :(

loominartz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Nie ma różnicy. Możesz pokazać cały kod?

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0
Kopiuj
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Notatnik.NET
{
    public partial class Form1 : Form
    {
        bool tekstZmieniony = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void plikToolStripMenuItem_Click(object sender, EventArgs e)
        { 
        }

        private void zamknijToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }
        public 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("Wstawić wywołanie metody zapisującej zawartość notatnika do pliku?");
                    break;
                case DialogResult.No: 
                    break;
                case DialogResult.Cancel: e.Cancel = true; 
                    break;
                default: e.Cancel = true;
                    break;     
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            tekstZmieniony = true;
        }
    }
}
loominartz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
1

Musisz dać ifa, żeby ten dialog pokazywał się tylko wtedy, kiedy zmienna tekstZmieniony jest true.

KU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 23
0

No, no faktycznie podziałało :) Dla innych, którzy będą mieli problem wklejam kod:

Kopiuj
public void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

//To trzeba było dodać !! 
          **  if (tekstZmieniony == true)**
            {


                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("Wstawić wywołanie metody zapisującej zawartość notatnika do pliku?");
                        break;
                    case DialogResult.No:
                        break;
                    case DialogResult.Cancel: e.Cancel = true;
                        break;
                    default: e.Cancel = true;
                        break;
                }
            }
        }

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.