Entwickler-Ecke
IO, XML und Registry - Arbeiten mit Dateien mit SaveFileDialog und OpenFileDialog
NoLe_Kazuik - Do 10.11.11 01:25
Titel: Arbeiten mit Dateien mit SaveFileDialog und OpenFileDialog
Hallo,
also wie der Titel des Threads schon andeutet, stelle ich mich ein wenig schwer an mit dem speichern mittels SaveFileDialog und dem öffnen der Datei mittels OpenFileDialog.
In dem Programm brauch ich erstmal das Speichern der RichTextBox des aktuellen Tabs und das Öffnen einer Datei in einen neuen Tab.
Ich bin mir durchaus bewusst, dass sicherlich schon einige Threads zu diesem Thema bestehen, aber wenn ich unseren geliebten Onkel "Google" befrage, finde ich immer nie das passende. Zudem werden wahrscheinlich weitere Fragen folgen, daher habe ich auch diesen Thread eröffnet.
Ich hoffe mir kann da jemand weiterhelfen.
mats74 - Do 10.11.11 08:21
Hallo
NoLe_Kazuik hat folgendes geschrieben : |
In dem Programm brauch ich erstmal das Speichern der RichTextBox des aktuellen Tabs und das Öffnen einer Datei in einen neuen Tab.
|
Also ohne konkrete Frage kann man auch keine konkrete Antwort geben.
Es ist also sehr schwierig Dir "irgend ein Problem" zu lösen :wink:.
Mit ein Bisschen Code oder weiteren Infos wäre uns doch schon geholfen.
storestore - Do 10.11.11 09:41
Hi,
Zu einen savefille und openfile Dialog gehört auch immer ein streamwritter und streamreader! Gib mal bei Youtube "c# savefiledialog" ein. Im Video wird es meistens mit einer normalen textbox gemacht, aber du kann auch eine richtextbox nehmen. Viel gluck :)
NoLe_Kazuik - Do 10.11.11 11:35
Hi, danke erstmal für eure beiden Antworten.
mats74 hat folgendes geschrieben : |
Es ist also sehr schwierig Dir "irgend ein Problem" zu lösen :wink:.
Mit ein Bisschen Code oder weiteren Infos wäre uns doch schon geholfen. |
Du hast recht mats, daher habe ich hier mal den Code, soweit wie ich ihn nun hab.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private void SaveChapterTSMI_Click(object sender, EventArgs e) { int whichTab = MainTC.SelectedIndex; String tabname = MainTC.SelectedIndex.ToString(); SaveFileDialog save = new SaveFileDialog(); save.Filter = "TPWriter Kapitel| *.tpwch"; save.Title = "Kapitel " + tabname + " speichern"; save.ShowDialog(); String filename = ""; } |
Nun weiss ich aber absolut nicht, wie es weitergeht. Problem ist halt, dass ich bisher nicht mit dem speichern von Dateien in Berührung kam in meinem Studium.
storestore hat folgendes geschrieben : |
Hi,
Zu einen savefille und openfile Dialog gehört auch immer ein streamwritter und streamreader! Gib mal bei Youtube "c# savefiledialog" ein. Im Video wird es meistens mit einer normalen textbox gemacht, aber du kann auch eine richtextbox nehmen. Viel gluck :) |
Ich dank dir stroestore... bei Youtube habe ich auch noch nicht nachgesehen (seltsam, dass mir Google keine Videos angezeigt hat :? ).
Mit freundlichen Grüßen
mats74 - Do 10.11.11 14:31
... da ist tip top beschrieben, wie man Dateien erstellen kann (insbesondere XML).
Ich gebe da noch eine kleiner Beispielcode dazu (nur als Grundlage und Denkanstoss gedacht):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| String s_dateiname = "C:\\Temp\\Test.txt"; FileStream fs_datei = null; StreamWriter sw_datei = null; String s_dateiinhalt = "Hallo allerseits"; StringBuilder sb = new StringBuilder(); sb.Append(s_dateiinhalt); try { fs_datei = new FileStream(s_dateiname, FileMode.Create); sw_datei = new StreamWriter(fs_datei);
sw_datei.WriteLine("{0}", sb); } catch (Exception ew) { Console.WriteLine("Exception: " + Convert.ToString(ew.Message)); } finally { if (sw_datei != null) sw_datei.Close(); } |
Vielleicht hilft es Dir bei deiner Arbeit.
Damit kannst Du eigentlich irgendwelche Dateien inklusiv Inhalt erzeugen.
Da gibt es natürlich noch andere Möglichkeiten, wie schon im vorherigen Link erwähnt.
NoLe_Kazuik - Fr 11.11.11 00:10
Hallo,
Super Tipp, dort finde ich auch schon einiges zu dem, was ich später noch gefragt hätte, von daher hat mir das sehr gut geholfen. Aber ganz neu bin ich in dem Forum nicht mehr... Hab nur noch nicht sooo viele Fragen gestellt. ^^
mats74 hat folgendes geschrieben : |
... da ist tip top beschrieben, wie man Dateien erstellen kann (insbesondere XML).
Ich gebe da noch eine kleiner Beispielcode dazu (nur als Grundlage und Denkanstoss gedacht):
Vielleicht hilft es Dir bei deiner Arbeit.
Damit kannst Du eigentlich irgendwelche Dateien inklusiv Inhalt erzeugen.
|
Dein Tipp inkl. Code hat mir jetzt nicht wirklich weiter geholfen, da ich ja mittels SaveFileDialog arbeiten will. Trotzdem vielen Dank an euch.
NoLe_Kazuik - Fr 11.11.11 01:30
Hallo, das Speichern und Laden des ersten Tabs klappt jetzt soweit ganz gut.
Hab jetzt aber ein Problem, da ich ja z.B. gleichzeitig mehrere Tabs geöffnet haben will und beim öffnen im neuen Tab die Datei geöffnet werden soll.
Sieht im groben so aus:
Methode für das hinzufügen von Tabs inkl. RTB:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| private void addChapter() { int TabNumber = MainTC.SelectedIndex; TabNumber = MainTC.TabCount + 1; TabPage tabnew = new System.Windows.Forms.TabPage(); tabnew.Text = "Neues Kapitel " + TabNumber; RichTextBox MainRTB = new System.Windows.Forms.RichTextBox(); MainRTB.Name = "MainRTB"; MainRTB.Multiline = true; MainRTB.AcceptsTab = true; MainRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; MainRTB.WordWrap = false; MainTC.Controls.Add(tabnew); tabnew.Controls.Add(MainRTB); MainRTB.Dock = DockStyle.Fill; } |
Methode für das Öffnen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| private void tsbOpen_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); open.FilterIndex = 1; open.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments); open.Multiselect = false; open.RestoreDirectory = true; if (DialogResult.OK == open.ShowDialog()) { fopen(open.FileName); } }
public void fopen(String filename) { if (filename != "") { System.IO.StreamReader read = new System.IO.StreamReader(filename); if (MainTC.SelectedIndex == 0 && MainRTB.Text == "") { while (!read.EndOfStream) { MainRTB.Text += read.ReadLine(); } } else { addChapter(); MainTC.SelectedIndex += 1; MainTC.SelectedTab.Focus(); while (!read.EndOfStream) { this.MainRTB.Text += read.ReadLine(); } } } } |
Das Problem ist jetzt, dass ich zwar einen neuen Tab öffne, der Text aber weiterhin im 1. Tab geschrieben wird.
Der Focus wird auch auf den neuen Tab gesetzt.
Hoffe mir kann hier nocheinmal geholfen werden.
Mit freundlich-nächtlichen Grüßen
EDIT: Hoffentlich werd ich noch übers Wochenende ne Antwort bekommen, jetzt wo "The Elder Scrolls V - Skyrim" über Steam freigeschaltet ist.
mats74 - Fr 11.11.11 09:29
Hallo NoLe
NoLe_Kazuik hat folgendes geschrieben : |
while (!read.EndOfStream)
{
this.MainRTB.Text += read.ReadLine();
}
|
Das Problem liegt im this-Zeiger, der die falsche TabPage ankickt.
Du musst die neu erzeugte TabPage mit der richtigen RichTextBox beschreiben.
Ich habe bei mir folgendes ausprobiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| while (!read.EndOfStream) { foreach (TabPage t in tabControl1.TabPages) { if (t.Name.ToString() == "") { foreach (Control c in t.Controls) { if (c.Name.ToString() == "MainRTB") { c.Text += read.ReadLine(); } } } } } |
... und hat bei mir dann auch funktioniert.
Das muss jetzt nur noch auf deine Wünsche modifiziert werden.
Da gibts sicherlich auch noch weitere Lösungen zur richtigen RichTextBox zu gelangen.
NoLe_Kazuik - Fr 11.11.11 21:42
Hey mats74,
dein Tipp hier
mats74 hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| while (!read.EndOfStream) { foreach (TabPage t in tabControl1.TabPages) { if (t.Name.ToString() == "") { foreach (Control c in t.Controls) { if (c.Name.ToString() == "MainRTB") { c.Text += read.ReadLine(); } } } } } |
|
hat super funktioniert. Danke sehr. Ich denke, dass ich nachher bzw morgen noch einmal ne Frage bezüglich des Speicherns habe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!