Nadine19 Geschrieben 24. November 2009 Geschrieben 24. November 2009 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. Zitieren
Klotzkopp Geschrieben 24. November 2009 Geschrieben 24. November 2009 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. Zitieren
LadyPreis Geschrieben 25. November 2009 Geschrieben 25. November 2009 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. Zitieren
Nadine19 Geschrieben 25. November 2009 Autor Geschrieben 25. November 2009 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. Zitieren
Rekon1602 Geschrieben 25. November 2009 Geschrieben 25. November 2009 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; } Zitieren
LadyPreis Geschrieben 25. November 2009 Geschrieben 25. November 2009 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. Zitieren
Nadine19 Geschrieben 25. November 2009 Autor Geschrieben 25. November 2009 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#. Zitieren
LadyPreis Geschrieben 25. November 2009 Geschrieben 25. November 2009 (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 25. November 2009 von LadyPreis Zitieren
Nadine19 Geschrieben 25. November 2009 Autor Geschrieben 25. November 2009 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; } } } } Zitieren
Nadine19 Geschrieben 25. November 2009 Autor Geschrieben 25. November 2009 Die erste Frage mit MessageBoxButtons.YesNoCancel hat sich geklärt. Bei MessageBoxButtons war Box klein geschrieben und bei YesNoCancel stand Cancle. Zitieren
Nadine19 Geschrieben 25. November 2009 Autor Geschrieben 25. November 2009 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; } } Zitieren
LadyPreis Geschrieben 25. November 2009 Geschrieben 25. November 2009 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 Zitieren
Nadine19 Geschrieben 25. November 2009 Autor Geschrieben 25. November 2009 Danke für den Link ! Werd mich mal dran machen. Zitieren
Empfohlene Beiträge
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.