Autor Beitrag
NoLe_Kazuik
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17
Erhaltene Danke: 2

Windows 7
VisualStudio 2010
BeitragVerfasst: Do 10.11.11 01:25 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Do 10.11.11 08:21 
Hallo
user profile iconNoLe_Kazuik hat folgendes geschrieben Zum zitierten Posting springen:

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.

_________________
Gruss
mats74

Für diesen Beitrag haben gedankt: NoLe_Kazuik
storestore
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: 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 :)

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"

Für diesen Beitrag haben gedankt: NoLe_Kazuik
NoLe_Kazuik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17
Erhaltene Danke: 2

Windows 7
VisualStudio 2010
BeitragVerfasst: Do 10.11.11 11:35 
Hi, danke erstmal für eure beiden Antworten.

user profile iconmats74 hat folgendes geschrieben Zum zitierten Posting springen:

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.

ausblenden 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.

user profile iconstorestore hat folgendes geschrieben Zum zitierten Posting springen:
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
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 10.11.11 13:34 
Hallo,

du könntest dir mal das Tutorial Alles über Dateien durchlesen, da findest du die verschiedenen Möglichkeiten zum Lesen und Speichern einer (Text-)Datei.

Edit: hatte aus Versehen die "erhaltene Danke: 2" als "Beiträge" interpretiert.


Zuletzt bearbeitet von Th69 am Fr 11.11.11 13:44, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: NoLe_Kazuik
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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):
ausblenden 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:
// Datei und Pfad erstellen
String s_dateiname = "C:\\Temp\\Test.txt";
// Filestreams erstellen
FileStream fs_datei = null;
StreamWriter sw_datei = null;
// Dateiinhalt erstellen
String s_dateiinhalt = "Hallo allerseits";
// Daten in Stream einlesen
StringBuilder sb = new StringBuilder();
sb.Append(s_dateiinhalt);
// Datei mit Inhalt fuellen und Datei erstellen
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.

_________________
Gruss
mats74
NoLe_Kazuik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17
Erhaltene Danke: 2

Windows 7
VisualStudio 2010
BeitragVerfasst: Fr 11.11.11 00:10 
Hallo,

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome:,

du könntest dir mal das Tutorial Alles über Dateien durchlesen, da findest du die verschiedenen Möglichkeiten zum Lesen und Speichern einer (Text-)Datei.


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. ^^


user profile iconmats74 hat folgendes geschrieben Zum zitierten Posting springen:
... 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):
ausblenden C#-Quelltext
1:
...					

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17
Erhaltene Danke: 2

Windows 7
VisualStudio 2010
BeitragVerfasst: 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:
ausblenden 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:
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Fr 11.11.11 09:29 
Hallo NoLe
user profile iconNoLe_Kazuik hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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.

_________________
Gruss
mats74

Für diesen Beitrag haben gedankt: NoLe_Kazuik
NoLe_Kazuik Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 17
Erhaltene Danke: 2

Windows 7
VisualStudio 2010
BeitragVerfasst: Fr 11.11.11 21:42 
Hey mats74,

dein Tipp hier
user profile iconmats74 hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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.