Entwickler-Ecke

WinForms - Inhalt von Textboxen speichern und öffnen


Kleinohr - Mi 31.03.10 10:02
Titel: Inhalt von Textboxen speichern und öffnen
Guten Morgen zusammen

Gibt es eine Möglichkeit den Inhalt von Textboxen in einer Datei abzuspeichern ? Falls ja kann diese Datei dann wieder ausgelesen werden, so dass sich die einzelnen Textboxen mit ihren Werten wieder füllen. Kann leider keine passenden Tipps finden.

mfg

Kleinohr


danielf - Mi 31.03.10 10:18

Guten Morgen,

du kannst über DataBinding bequem Werte von einer Quelle (zum Beispiel ein Objekt oder DB) an eine Eigenschaft von einem Control binden. Wenn du zum Beispiel ein serialisierbares Objekt hast, kannst du 1) diese Objekt an die (Text) Eigenschaft deiner TextBox binden und b) es (de-)serialisieren und somit Konsistent zu machen.

Gruß Daniel


Kleinohr - Mi 31.03.10 10:21

Danke Dir schon mal für die Info

hast du vielleicht ein kurzes Quellcodebeispiel wie sowas aussieht. habe noch keinen Plan wie es funktionieren kann.
Werde jetzt mal nach DataBinding suchen

gruß

Kleinohr


danielf - Mi 31.03.10 10:59

Also zuerst solltest du dir gedanken machen, was das für Daten sind und in wie fern sie zusammen gehören.

Meistens purzeln und springen dann ("Daten")Objekte raus ;)

Kurzes "Setup" Beispiel:

Log_File: logs/Application.log
Log_Level: Debug

D.h. du hast für deine Einstellungen eine LogDatei-Name und ein LogLevel. Daraus lässt sich nun eine Klasse bilden:

C#-Quelltext
1:
2:
3:
4:
5:
public class LogSettings
{
   public string File { get; set; }
   public string Level { get; set; }
}


Diese Datei kannst du dann Serialisieren.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
// objekt anlegen
LogSettings logSettings = new LogSettings();
logSettings.File = "logs/Application.log";
logSettings.Level = "Debug"
// serializer initialisieren
XmlSerializer serializer = new XmlSerializer(typeof(LogSettings));
// objekt speichern
using(Stream s = File.OpenWrite("settings.ini"))
{
serializer.Serialize(logSettings, s);
}
// objekt laden
using(Stream s = File.OpenRead("settings.ini"))
{
   LogSettings geladeneSettings = (LogSettings) serializer.Deserialize(s);
   Console.WriteLine("LogFile: " + geladeneSettings.File);
}


// Evtl. gibt's Syntax-Fehler, aber soweit das prinzip
Wegem Databinding bitte ich dich im Netz zu googelen. Das mache ich immer über den Designer und sowas zu erklären ist blöd :) Alternativ kannst du einfach mal im Designer rumschauen bei den controls unter DataBinding... funktioniert eigentlich auf Anhieb :)


JüTho - Mi 31.03.10 11:23

Unter Umständen gibt es eine völlig andere (sinnvolle) Lösung. Wenn du dich mit einer größeren Textdatei befassen und diese in einer MultiLine-TextBox bearbeiten willst, geht es direkt:

C#-Quelltext
1:
2:
3:
myTextBox.Text = File.ReadAllText(filename);
// bzw.
File.WriteAllText(filename, myTextBox.Text);

Ähnlich ginge es mit einer RichTextBox.

Aber diese Verfahren sind wenig sinnvoll, wenn es sich um einzeilige TextBoxen handelt. Deshalb tendiert Daniel zu einer Lösung, die alle solche Texte zusammenfasst.

Jürgen


grinchi - Do 01.04.10 10:37

XMLs wären auch noch ne alternative

mfg grinchi