Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
UserControl vom Benutzer anpassen lassen und dann Einstellungen speichern
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

UserControl vom Benutzer anpassen lassen und dann Einstellungen speichern

beantworten | zitieren | melden

Hallo zusammen,

ich habe ein kleines Problem. Irgendwie schaffe ich es nicht Objekte zu speichern, sprich ganze Klassen auf der Festplatte. Und zwar nicht im Projekt, sondern wärend des Runtimes.
Wenn ich z.B. ein WPF UserControl habe, welches des User so angepasst hat, wie es haben will, so möchte ich das komplette Objekt als datei abspeichern und wieder laden.
In Java geht es über die Reader Klassen (also BufferedReader und BufferedWriter und welche noch dazu gehören).
Wie geht es in C#?
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2361

beantworten | zitieren | melden

Such mal hier im Forum nach Serialisierung. :)
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

beantworten | zitieren | melden

BinaryFormatter kann ganze klassen mitsamt abhängigkeiten in einen stream schreiben und wieder lesen.
das problem an der sache: man sollte es nicht auf gui-objekte anwenden.
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7581
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

meinst etwas der Art Usereinstellungen speichern?


mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Zitat von inflames2k
Such mal hier im Forum nach Serialisierung. :)

Super, danke... vergisst man schnell so was, wenn man wenig mit sowas zutun hat. :)
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Zitat von gfoidl
meinst etwas der Art Usereinstellungen speichern?

Ne ne, Serialisierung war schon richtig... :)
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

Und im allgemeinen macht es keinen Sinn ein GUI Element (in dem Fall das WPF UserControl) zu speichern und wieder zu laden. Der ganze Kontext in dem das UserControl existiert geht ja verloren. Sinnvoller ist es die Daten zu speichern welches das Control visualisiert. Grad im WPF Bereich ist das ganze aber nochmal bissle anders als z.B. in Windows Forms, da du dem User ja die Möglichkeit geben kannst per Styles das Aussehen völlig unabhängig von der Funktionalität zu ändern. Da würde man dann einfach die angepasste XAML Datei laden um dem Control das entsprechende Aussehen zu geben.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Aber die Daten, welche innerhalb der Class geladen wurden, sollten erhalten bleiben.
private Nachricht | Beiträge des Benutzers
zero_x
myCSharp.de - Member

Avatar #avatar-2567.gif


Dabei seit:
Beiträge: 1069
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo morbus85,

verwende einfach eine Klasse und binde diese Klasse an den DataContext des UserControls. Dann speicherst bzw. serialisierst du die Klasse. Das ist wohl die einfachste Möglichkeit. Das komplette UserControl zu serialisieren ist - wie die anderen schon sagten - keine gute Idee. Speicher nur Daten, die relevant sind. Was bringt es dir, wenn du das komplette UserControl abspeicherst?

Verwende die Forensuche. Da findest du reichlich Informationen.

zero_x
zero_x | myCSharp.de - gemeinsam mehr erreichen

Für längere Zeit inaktiv.
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Ja ich weiß, dass es etwas unschön ist eine ganze Klasse so zu speichern, aber evtl. ist es bei mir notwendig.
Ich überlege ob ich doch alle Informationen in ArrayList einpacke und dann einfach ne extra Klasse schreibe, die die Informationen an die richtigen Plätze verweist.....

Wenn so ein Code vvorhanden ist, wäre er nett :)
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3652
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo,
Zitat
Ja ich weiß, dass es etwas unschön ist eine ganze Klasse so zu speichern, aber evtl. ist es bei mir notwendig.
Ich überlege ob ich doch alle Informationen in ArrayList einpacke und dann einfach ne extra Klasse schreibe, die die Informationen an die richtigen Plätze verweist.....
Was ist denn der Grund wieso du es nicht so machen willst / kannst wie dir alle vorschlagen?

Wie bereits von den anderen gesagt ist es am einfachsten wenn du dir eine Klasse erstellst die die ganzen Einstellungen enthält.
Diese kannst du dann speichern (bzw. serialisieren) und wieder auslesen.

.Net hat schon das Konfigurationsmodell integriert mit dem man recht konfortable die Einstellungen speichern kann.
gfoidl hat dir bereits ein Beispiel dazu gepostet.
Hier noch ein Tutorial dazu: [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0

PS: Bitte beachte [Hinweis] Wie poste ich richtig?
Ein Blick in die Dokus / Forensuche hätte dir da sicherlich auch weitergeholfen

Gruss
Michael
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Eigentlich sind die Einstellungen Tools, die in ein StackPanel eingefügt werden um eine Dokumentationsvorlage zu erzeugen. (Darf ned so viel davon reden, da es ein Projekt innerhalb der Firma ist).
Die Tools bestehen eignentlich aus mehreren Klassen, die z.B. Kapitel oder Informationsblöcke darfstellen, die wiederrum bearbeitet werden können. Innerhalb dieser Klassen werden z.B. Objekte übergeben, die für die Kommunikation mit der DB verantwortlich sind. Mit Styles hat es nichts zutun.
Wenn ich jetzt innerhalb diesen StackPanels meine Informationsblöcke einfühge, die aus UserControls bestehen, will ich dass der User die gesammte Vorlage speichern und laden kann. Klar könnte ich eine Klasse ausarbeiten, die alles in ArrayLists verpackt und wieder auspackt, aber es wäre zu umständlich.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

Die UserControls wo du lädst repräsentieren doch aber nur die Informationsblöcke dahinter (sollte es nicht so sein und die UserControls enthalten die Logik habt ihr softwaredesigntechnisch nen riesen Bock drin). Deshalb musst du diese speichern und laden und nicht die UserControls welche nur die grafische Darstellung sind.

Und vergiss am besten das Wort ArrayList - die Klasse ist seit Jahren schon obsolet in .Net. Da gibts die generischen Pendants zu.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Ja ich weiß, doch das MVC Prinzip ist mir irgendwie noch nicht so rein gekommen. Es fällt mir schwer irgendwie GUI vom Model und vom Controll zu trennen.

Wieso ArrayList vergessen? Ich finde die verdammt praktisch. Genau wie in Java mit dem Vector.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

es muss nicht MVP sein (bzw. MVVM als WPF Pendant dazu), es reicht auch so einfach darauf zu achten das die GUI wirklich nur die Daten anzeigt. Dann gibts auch keinerlei Probleme die Daten zu speichern und bei Bedarf wieder laden und anzeigen zu lassen. Weil, lange Rede kurzer Sinn - es gibt keine möglichkeit UIElemente zu speichern und wieder genauso herzustellen. Es ist für einfache Datenklassen problemlos möglich, und auch GUI Teile können als XAML serialisiert und wieder geladen werden, aber es ist nicht möglich eine GUI Klasse welche Daten hält ordentlich zu speichern und wieder herzustellen.

Und ja, es ist so praktisch eine untypisierte Liste zu haben wo man bei jedem Zugriff casten muss... Wie gesagt, es gibt die entsprechenden generischen Klassen dazu die verwendet werden sollten. ArrayList ist seit .Net 2.0 praktisch überflüssig.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5992
Herkunft: Leipzig

beantworten | zitieren | melden

Zitat von talla
es gibt keine möglichkeit UIElemente zu speichern und wieder genauso herzustellen.

Wenn es wirklich um die Speicherung von UI-Elementen geht, ist doch der XAMLWriter / XAMLReader die beste Alternative, weil genau für den Einsatzzweck gemacht.


@morbus85

ArrayList ist deshalb veraltet, weil es seit Framework 2.0 die generischen Collections mit all ihren Vorteilen gibt, also z.B. List<T>.

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Zitat von MrSparkle
Wenn es wirklich um die Speicherung von UI-Elementen geht, ist doch der XAMLWriter / XAMLReader die beste Alternative, weil genau für den Einsatzzweck gemacht.
Na, net so ganz. Man serialisiert ja die Beschreibung der GUI (das erwähn ich übrigens auch in dem Satz nach dem welchen du zitiert hast :)), nicht die einzelnen Objekte mit ihren Werten und ihrer Identität. Und erst recht nicht noch zusätzliche Funktionalität welche vielleicht Code-behind liegt.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
morbus85
myCSharp.de - Member



Dabei seit:
Beiträge: 84

Themenstarter:

beantworten | zitieren | melden

Ich weiß, dass es etwas nervt, aber die Werte jeden einzelnen Objektes sind auch wichtig. Man will so zusagen die GUI konservieren, so wie sie ist.
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Und genau das geht nicht. Trenn die GUI von den Daten und dann geht das auch.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers