# [C#) Benutzereingaben speichern



## Fisch (9. Oktober 2002)

Wie kann ich Benutzereingaben speichern?? Wenn ich z.B in
einer Textbox einen Pfad durch den Benutzer angeben lassen möchte,
wie speicher ich das ab, das es beim nächsten Programmstart  noch da ist? Muss ich die angaben in einer extra Datei speichern????


----------



## Dario Linsky (9. Oktober 2002)

sobald das programm geschlossen wird, sind auch normalerweise alle eingaben weg. das heisst, dass beim nächsten programmstart alle steuerelemente wieder leer sind.
aber es gibt etliche wege, das zu umgehen...

*weg eins: eine textdatei. *
wenn das programm beendet wird, schreibst du den inhalt einer textbox in eine textdatei. beim nächsten programmstart liest du den inhalt der datei wieder aus und schreibst den text in die textbox.

*weg zwei: eine ini-datei (etwas spezieller als weg eins). *
ini-dateien waren früher ein guter weg, um programmeinstellungen dauerhaft zu speichern. solche einstellungen sind z.b. höhe und breite des fensters, schriftarten, und eben auch inhalte von steuerelementen. ini-dateien werden zwar auch als textdatei gespeichert, aber im gegensatz zu normalen textdateien kann man über eine ini-datei die werte gezielt ansprechen.

*weg drei: eine datenbank. *
ähnlich wie in einer ini-datei kann man in einer datenbank die programmeinstellungen in einer tabelle speichern. dadurch kann man beim programmstart die einzelnen einstellungen gezielt auswählen. zusätzlich kann man durch die zweidimensionale struktur einer tabelle auch mehrere verschiedene einstellungen auswählen.

*weg vier: die windows-registrierung. *
seit windows 95 hat microsoft anstelle von ini-dateien die windows-registrierung aufgebaut. damit hat man zugriff auf eine hierarchisch angeordnete datenbank, in der man verschiedene einstellungen speichern kann.
in der windows-registrierung werden beispielsweise die zuordnungen für dateitypen gespeichert (also, dass *.txt-dateien mit notepad geöffnet werden).
den registrierungseditor sollte inzwischen fast jeder kennen und einigermassen bedienen können. in c# müsste es auch einige klassen für den umgang mit der registrierung geben.


----------



## Fisch (9. Oktober 2002)

Erstmal vielen Dank für Deine reichhaltige Antwort.
Das mit der Datei habe ich mir ja schon fast gedacht und bis zur Textdatei kann ich Dir folgen.Wie eine *.ini Datei aussieht hab ich ja auch schon gesehen, aber kannst Du mir mal ein kurzes CodeBeispiel geben, wie man darauf gezielter zugreifen kann??
Wäre für die anderen beiden Möglichkeiten natürlich auch nett, aber ich vermute mal das wird wohl etwas komplizierter(oder?), zumal ich eigentlich keine Ahnung von der regedit habe(wusste auch nicht das das schon zum Standard Wissen gehört, ja ja man wird alt)


----------



## krypta (9. Oktober 2002)

punkt 1, 3 wie auch 4 sind in der sdk-docu gut genug abgehandelt (sowie auch sicher hier im board und auf jeder page die sich rund um .net / c# dreht)

zu punkt 2 kann ich dir folgendes empfehlen -> http://www.codeproject.com/csharp/cs_ini.asp

rgds


----------



## Dario Linsky (9. Oktober 2002)

ini-dateien sind zwar durchaus eine gute sache, aber wie gesagt: die stammen noch aus den 16bit-varianten von windows und sind schon etwas in die jahre gekommen. 1995 wurden die dann durch die windows-registrierung abgelöst, aber es gibt sie immer noch.

zur theorie von ini-dateien:
eine ini-datei besteht aus verschiedenen sektionen und jede sektion aus mehreren schlüsseln. wenn man beispielsweise das aussehen eines fensters speichern will, könnte die entsprechende ini-datei so aussehen:

```
[StartupPosition]
Left=192
Top=100
Width=640
Height=480
Maximize=0
```
die sektion heisst dann "StartUpPosition" und enthält die einzelnen schlüssel "Left", "Top", "Width", "Height" und "Maximize". ich hab bis jetzt allerdings nur in delphi damit gearbeitet, also kann ich leider keinen c#-code dazu schreiben...

zum thema registry hilft dir vielleicht dieses tutorial weiter - englischkenntnisse vorausgesetzt.


----------



## Fisch (9. Oktober 2002)

Dann Danke ich Euch erstmal, werd mich mal versuchen durchzuwurschteln.
Mal schauen was ich mit meinen bescheidenen Englishkentnissen erreiche.(Falls ihr doch noch ein Link in deutsch habt immer her damit )


----------



## goela (10. Oktober 2002)

ALLGEMEINER HINWEIS:
INI-Dateien gibt's in dem Sinne unter C# nicht mehr bzw. sollen oder sind nicht mehr angebracht! Besser ist es diese in eine XML-Struktur abzuspeichern. In C# ist dies eigentlich so vorgesehen!

Aber machbar sind INI-Dateien natürlich in C# immer noch! Aber nicht mehr "Up to date"!!!


----------



## Fisch (10. Oktober 2002)

Ok, hab mir schon vorgenommen mich mit dem regedit zu beschäftigen. Was genau heist wieder XML Struktur??
Mir scheint mir fehlt auch noch ganz schön viel Wissen drumrum um die Programmierung


----------



## goela (10. Oktober 2002)

Vergiss die *Registry*!!!!

Warum???
Ganz einfach! C# insbesondere .NET erhebt den Anspruch "plattform" unabhängig zu sein!!! Was es zum heutigen Datum natürlich (noch) nicht ist!

Also, sollte man auch so programmieren!!!! Oder meinst Du UNIX, MAC oder LINUX haben eine Registry????

Deshalb wird in C# bzw. unter .NET die Daten vorzugsweise in eine XML Datei gespeichert! Dies kann auf jedem System gelesen werden, da dies eine genormte Struktur für das Speichern von Daten in einem Textdatei ist!

Natürlich musst es so nicht machen, aber wer weiss, wie lange die Registy noch lebt!!!??? Dann lieber eine INI-Datei schreiben, wenn Dir das Schreiben und Lesen einer XML-Datei zu kompliziert sein sollte!


----------



## Fisch (11. Oktober 2002)

Ok, das sehe ich ein, aber die Frage ob eine XML Datei zu kompliziert ist kann ich nicht beantworten, da mir das nix sagt. Was meinst Du denn?? Ist das zu kompliziert für den Anfang?? Hast Du eventuell dazu ein Tut für Blöde(wenns geht in deutsch). Ich hab natürlich auch keine Lust mich noch mit altem Sch... zu beschäftigen(*.in).


----------



## Dario Linsky (11. Oktober 2002)

xml (eXtensible Markup Language) ist eine beschreibungssprache, ähnlich wie html (HyperText Markup Language) und ist auch etwas ähnlich aufgebaut.
genau wie html von browsern unterstützt wird, kann man xml-dateien ebenso von einem programm parsen lassen. ich hab zwar selber noch nichts damit gemacht, aber bei google gibt es bestimmt viele ergebnisse.


----------



## Patrick Kamin (11. Oktober 2002)

*-*

In selfHTML ist ein Kapitel nur dem Arbeiten mit XML Datein gewidmet, sollte deshalb gut erklärt sein.
http://selfhtml.teamone.de/xml/index.htm

Ansonsten gibt es hier einen wirklich flüchtigen Überblick
http://www.xmlstarterkit.com/german/xml/xml_in_minuten.htm


----------



## goela (13. Oktober 2002)

> Hast Du eventuell dazu ein Tut für Blöde(wenns geht in deutsch). Ich hab natürlich auch keine Lust mich noch mit altem Sch... zu beschäftigen(*.in).



Brauchst Du noch ein's wenn Du jetzt schon die Links von Caminus hast??


----------



## Fisch (13. Oktober 2002)

Immer her damit, ich bin Jäger und Sammler . Habt ihr noch ne Idee zu der anderen Frage, die ich noch offen habe??
(C#] Zustandsanzeige der Bearbeitung)


----------



## sNiff3ls (3. Juni 2008)

Ich weiss , dass der Beitrag schon etwas älter ist, aber für User die das selbe problem haben:
In Visual Csharp (ich habe Express 2005) auf 
Projekt -> Neues Element hinzufügen ... -> Einstellungsatei (*.settings)
Darauf kann bequem zugegriffen werden über z.b.


```
WindowsApplication1.Settings1 settings = new Settings1();
IPAddress = settings.IPAddress.ToString();
Password = settings.Password.ToString();
```

bzw. gespeichert werden über


```
WindowsApplication1.Settings1 settings = new Settings1();
settings.IPAddress = IPAddress.ToString();
settings.Password = Password.ToString();
settings.Save();
```

Ausserdem können in der Datei bereits im Editor Werte zugewiesen werden.
Je nach Einstellung liegt die Datei (*.settings) später entweder im gleichen Verzeichnis wie die *.exe oder in dem Persönlichen Ordner.
Die Datei liegt später im selben Verzeichnis wie die .exe bzw. wird dort erstellt.

(http://msdn.microsoft.com/de-de/library/aa730869(vs.80).aspx)


----------

