Zum Inhalt springen

[C#] Speicherabfrage wenn man Anwendung schließen will


Empfohlene Beiträge

Geschrieben

Ich soll ein Texteditor in Visual Studio 2008 mit C# programmieren. Hab schon einiges fertig, aber noch ein paar Probleme.

Wenn man die Anwendung schließen will, soll eine Speicherabfrage kommen, wenn man noch nicht gespeichert hat.

Man müsste sich ja dann auch darauf beziehen, ob in der richTextBox überhaupt etwas steht.

Außerdem ärgere ich mich schon die ganze Zeit über den SaveFileDialog, er speichert zwar den Text aus der richTextBox in eine .txt Datei, aber heraus kommt dabei immer sowas:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}

\viewkind4\uc1\pard\f0\fs17 Hallo, dies ist ein Test!\par

}

Ich hoffe ihr könnt mir weiterhelfen.

Geschrieben
Außerdem ärgere ich mich schon die ganze Zeit über den SaveFileDialog, er speichert zwar den Text aus der richTextBox in eine .txt Datei, aber heraus kommt dabei immer sowas:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}

\viewkind4\uc1\pard\f0\fs17 Hallo, dies ist ein Test!\par

}

Das hat erstens mit dem SaveFileDialog rein gar nichts zu tun, und zweitens ist das astreines RTF. Wenn du dir das mit einem Texteditor anguckst, der kein RTF darstellen kann, ist klar, dass dabei Murks herauskommt.
Geschrieben

und zum Thema "Änderungen speichern":

erstell dir eine bool variable, die am anfang false ist. Sobald der User eine Änderung in deiner Richtextbox macht (Stichwort Key-Events) setzt du die Variable auf true.

Vor dem Beenden kannst du die variable dann abfragen und bei "true" einen Dialog "möchten sie speichern..." einblenden.

Geschrieben

Ach so, kann ich das irgendwie ändern, das kein RTF erscheint? Man soll den Text halt mit dem ganz normalen Editor, der Standartmäßig bei Windows dabei ist, lesen können.

Das mit den Änderungen speichern habe ich soweit hinbekommen, aber ich möchte nicht nur drauf hingewiesen werden, sondern auch gleich entscheiden können, ob ich es speicher, nicht speicher, oder abbreche.

So eine Message Box wie sie im Windows Editor auftaucht: "Der Text in der Datei Unbenannt wurde verändert. Aktuelle Änderungen speichern? Ja, Nein, Abbrechen.

Geschrieben

Des kannst du doch einfach mit ner normalen Messagebox machen.

in etwa:


DialogResult dr = MessageBox.Show("Wollen Sie Speicher?", "Speichern", MessageboxButtons.YesNoCancle);


if( dr == DialogResult.Yes)

{

//Speichern

}

else if( dr == DialogResult.No}

{

//Beenden

this.Dispose();

}

else if( dr == DialogResult.Cancle)

{

//Beenden abbrechen

e.Cancel = true;

}

Geschrieben

So eine Message Box wie sie im Windows Editor auftaucht: "Der Text in der Datei Unbenannt wurde verändert. Aktuelle Änderungen speichern? Ja, Nein, Abbrechen.

Genau das habe ich meines Erachtens nach in meinem letzten Satz geschrieben.

Geschrieben
Des kannst du doch einfach mit ner normalen Messagebox machen.

in etwa:


DialogResult dr = MessageBox.Show("Wollen Sie Speicher?", "Speichern", MessageboxButtons.YesNoCancle);


if( dr == DialogResult.Yes)

{

//Speichern

}

else if( dr == DialogResult.No)

{

//Beenden

this.Dispose();

}

else if( dr == DialogResult.Cancel)

{

//Beenden abbrechen

e.Cancel = true;

}

Danke für deine Hilfe :-) Es funktioniert aber noch nicht so ganz.

Bei MessageboxButtons meckert er das der Name nicht im aktuellen Kontext ist. Wie Und bei e.Cancel das Cancel sich nicht mit "System.EventArgs" verträgt.

Nur zu Erinnerung, ich noch totale Anfänger in C#.

Geschrieben (bearbeitet)

Ohne jetzt eine IDE hier zu haben, tippe ich mal, dass es "MessageBoxButtons" heißen muss.

und das e.cancel hängt davon ab, wo du den quellcode implementierst.

Es macht es wesentlich einfacher, wenn du den Teil deines Quellcodes hier postest. Dann kann man viel besser darauf eingehen

Bearbeitet von LadyPreis
Geschrieben

Ok, hier ist er:


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Configuration;

using System.Xml;


namespace WindowsFormsApplication2

{

    public partial class Form1 : Form

    {

        string strFileName;

        bool textvorhanden = false;

        bool Cancel;

        private System.Drawing.Printing.PrintDocument docToPrint =

new System.Drawing.Printing.PrintDocument(); 


        public Form1()

        {

            InitializeComponent();

        }


        private void richTextBox1_TextChanged(object sender, EventArgs e)

        {

            if (this.richTextBox1.Text.Length == 0)

            {

                textvorhanden = false;

            }

            else

            {

                textvorhanden = true;

            }

        }


        private void neuToolStripMenuItem_Click(object sender, EventArgs e)

        {


            if (textvorhanden == true)

            {

                MessageBox.Show("Nachricht wurde noch nicht gespeichert!", "Texteditor");

            }

            else

            {

                richTextBox1.Text = "";

            }

        }


        private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)

        {

            String input = string.Empty;

            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

            dialog.InitialDirectory = "C:"; dialog.Title = "Select a text file";

            if (dialog.ShowDialog() == DialogResult.OK)

                strFileName = dialog.FileName;

            if (strFileName == String.Empty)

                return;

        }


        private void speichernToolStripMenuItem_Click(object sender, EventArgs e)

        {

            {


                SaveFileDialog dlg = new SaveFileDialog();

                dlg.Filter = "Textdateien (*.txt)|*.txt|"

                    + "Alle Dateien (*.*)|*.*";


                if (dlg.ShowDialog() == DialogResult.OK)

                {

                    richTextBox1.SaveFile(dlg.FileName);



                    this.Text = System.IO.Path.GetFileNameWithoutExtension(dlg.FileName);

                }

            }

        }


        private void speichernUnterToolStripMenuItem_Click(object sender, EventArgs e)

        {

            {


                SaveFileDialog dlg = new SaveFileDialog();

                dlg.Filter = "Textdateien (*.txt)|*.txt|"

                    + "Alle Dateien (*.*)|*.*";


                if (dlg.ShowDialog() == DialogResult.OK)

                {

                    richTextBox1.SaveFile(dlg.FileName);



                    this.Text = System.IO.Path.GetFileNameWithoutExtension(dlg.FileName);

                }

            }

        }


        private void druckenToolStripMenuItem_Click(object sender, EventArgs e)

        {


            printDialog1.AllowSomePages = true; 


            printDialog1.Document = docToPrint; 


            DialogResult result = printDialog1.ShowDialog(); 


            if (result == DialogResult.OK) 

            { 

                docToPrint.Print(); 

            } 

        }


        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)

        {


            DialogResult dr = MessageBox.Show("Wollen Sie Speichern?", "Speichern", MessageboxButtons.YesNoCancle);


            if( dr == DialogResult.Yes)

            {

            //Speichern

            }

            else if( dr == DialogResult.No)

            {

            //Beenden

            this.Dispose();

            }

            else if( dr == DialogResult.Cancel)

            {

            //Beenden abbrechen

            e.Cancel = true;

        }




            /*if (this.textvorhanden == true)

            {

                MessageBox.Show("Nachricht wurde noch nicht gespeichert!", "Texteditor");

            }

            else

            {

                Application.Exit();

            }*/

        }


        private void rückgängigToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.richTextBox1.Undo();

        }


        private void wiederholenToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.richTextBox1.Redo();

        }


        private void ausschneidenToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.richTextBox1.Cut();

        }


        private void kopierenToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.richTextBox1.Copy();

        }


        private void einfügenToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.richTextBox1.Paste();

        }


        private void allesMakierenToolStripMenuItem_Click(object sender, EventArgs e)

        {

            this.richTextBox1.SelectAll();

        }


        private void formatToolStripMenuItem_Click(object sender, EventArgs e)

        {

            FontDialog fontDialog = new FontDialog();

            if (fontDialog.ShowDialog() != DialogResult.Cancel)

            {

                richTextBox1.Font = fontDialog.Font;

            }

        }


        private void farbeToolStripMenuItem_Click(object sender, EventArgs e)

        {

            ColorDialog colorDialog = new ColorDialog();

            if (colorDialog.ShowDialog() != DialogResult.Cancel)

            {

                richTextBox1.ForeColor = colorDialog.Color;

            }

        }

    }

}

Geschrieben

Das mit e.Cancel hab ich auch gelöst, hab es einfach in Application.Exit(); geändert.

Jetzt erscheint die Message Box, aber wenn ich auf "Wollen Sie speichern?" "Ja" klicke passiert nichts, da sollte sich doch dann ein SaveFileDialog melden? Wie kann ich das am besten anstellen?

Hier nochmal der Code:


            if (this.textvorhanden == true)

            {

                DialogResult dr = MessageBox.Show("Wollen Sie Speichern?", "Speichern", MessageBoxButtons.YesNoCancel);


                if (dr == DialogResult.Yes)

                {

                    //Speichern

                }

                else if (dr == DialogResult.No)

                {

                    //Beenden

                    this.Dispose();

                }

                else if (dr == DialogResult.Cancel)

                {

                    //Beenden abbrechen

                    Application.Exit();

                    //e.Cancel = true;

                }

            }

Geschrieben

Jetzt erscheint die Message Box, aber wenn ich auf "Wollen Sie speichern?" "Ja" klicke passiert nichts, da sollte sich doch dann ein SaveFileDialog melden? Wie kann ich das am besten anstellen?

indem du dir das hieranschaust

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...