Variable mit Namen ansprechen?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von us4711.

    Hi
    Wollte mich bloß nochmal zurückmelden. Ich hab eine Frage an @~blaze~ :
    Ich sehe bei vielen Anwendungen, das diese ihre Einstellungen alle in XML-Datein speichern, wie My.Settings halt, aber in einer eigenen Datei. Wenn ich das richtig verstehe, macht dein Beispielcode genau das? Wie kann ich aber sagen, welche Eigenschaft mit welchem Wert ich jetzt speichern will?
    Ich will z.B. die Eigenschaft Color1 mit dem Farbenwert speichern.
    Aber auch z.B. die Eigenschaft Boolean1 mit dem Wert True speichern. ...

    Wie kann ich das realisieren, und welche Themen muss ich mir dazu anschauen?
    Liebe Grüße
    sothere
    Ja genau. Du musst nur noch eine Eigenschaft anlegen, also bspw.

    VB.NET-Quellcode

    1. Public Property Color1 As Color

    Im Fall, dass du Binding (also der Code mit dem INotifyPropertyChanged), würdest du entsprechend

    VB.NET-Quellcode

    1. Private _color1 As Color 'Das Feld wird serialisiert (da gab's einen Unterschied zwischen XmlSerializer und BinaryFormatter, glaub ich oder zumindest etwas, was ich mal nachschauen wollte)
    2. Public Property Color1 As Color
    3. Get
    4. Return _color1
    5. End Get
    6. Set(value As Color)
    7. _color1 = value
    8. UpdateProperty("Color1") 'Hier eben den Namen der Property angeben
    9. End Set
    10. End Property

    aufrufen. Die Eigenschaften legst du dann in die 2. partielle Klasse ab. Partielle Klassen kann man dazu verwenden, um eine Klasse in mehrere Teile aufzuspalten, die werden dann wieder zu einer einzigen zusammengeführt. Es ist nur elegant, weil du die andere partielle Klasse dann eben für die Daten verwenden kannst, während der Code zum Speichern in den anderen Part ausgelagert ist. ;)

    Gruß
    ~blaze~
    Sorry das ich mich erst jetzt melde, hatte diese Woche irgendwie keine Zeit. Ich hab deinen Code mir jetzt mal angeschaut und getestet, und irgendwie bekomm ich das nicht hin.
    Wenn ich die XML Datei speichere, dann kommt immer nur das raus:

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <ApplicationSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    3. <Color1 />
    4. </ApplicationSettings>

    Und das wars dann auch. Ich kann also nicht laden bzw. speichern.


    Ich verstehe nicht ganz, was der Save oder Load Aufruf ohne XML macht, da da nur Datenstuß rauskommt, es dafür aber funktioniert. Das Format sieht so aus, als ob es mal XML gewesen sein wollte.


    Ist das ein Bug oder so gewollt (Ich habe ja eher eine XML-Einstellung angestrebt, da das ja viele Anwendungen machen (Einstellungen per XML speichern) und der Benutzer diese zur Not ändern lassen kann.?
    Liebe Grüße
    sothere
    Ehrlich gesagt bin ich mir in der Hinsicht jedes mal nicht sicher. Ich kenne die Problematik bereits (dachte, ich hätte es sogar irgendwo vermerkt), aber bisher habe ich nur ein "Workaround" gefunden, indem ich den Namen der Farbe serialisieren ließ. Ich tendiere dazu, zu denken (das bedeutet, ich bin mir nicht sicher, halte es aber für bedingt möglich), dass Color die Xml-Serialisierung nicht unterstützt, da keine Daten (direkt die Felder), sondern Eigenschaften zur Serialisierung verwendet werden und Color diese nicht unterstützt. Du kannst mal probieren, eine (statische) Instanz von ColorConverter (ConvertToInvariantString und ConvertFromInvariantString, ohne Invariant wäre es kulturabhängig) zur Erzeugung einer Stringdarstellung der Farbe zu verwenden und eben diese zur Serialisierung freizugeben. Dabei solltest du das XmlIgnoreAttribute auf die Eigenschaft Color1 legen.

    Gruß
    ~blaze~
    Was daran ist unschön, die jeweiligen Werte in eine txt zu schreiben? Ich gebe zu, dass einlesen muss mit TryCatch und Parse geschehen beim speichern von Datentypen != String, aber sonst?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    .txt wäre nicht an der Bedeutung der Daten orientiert, d.h. die kannst du verändern, wie du willst. Xml-Dateien, usw. unterliegen einem spezifischen Protokoll, das diese Bedeutung über den Quelltext bereitstellt.
    Es spricht ja prinzipiell nicht so viel dagegen, diesen Grund zu ignorieren, aber es ist weiterhin weniger elegant, da es auch an die Programmdynamik angeknüpft zu Schwierigkeiten führen kann, wobei auch die Fehleranfälligkeit des Codes zunimmt.

    Übrigens sind binäre Formatierung und Xml-Serialisierung zwei Paar Stiefel. Beide können dazu verwendet werden, Daten zu speichern, allerdings haben beide jeweils unterschiedliche Herangehensweisen und Vor-, sowie Nachteile. Binäre Formatierung kann nicht vom Benutzer schön editiert werden, Xml-Dateien sind nicht kompakt und ineffizient (was bei Einstellungen nicht unbedingt eine Rolle spielt). Es gibt noch einige Unterschiede mehr, aber die lasse ich jetzt einfach mal weg (zumal sie mir gerade eh nicht alle einfallen wollen :D).

    Gruß
    ~blaze~
    stimmt iwas nicht mit der von vb1963 zum Download gegebenen Lösung (post#39)?

    Da macht sich einer die Mühe und programmiert dir eine Fertig-Lösung, und du lädst sie nicht mal runter! Stattdessen endlos annere User weiterbeschäftigen mit theoretisierenden Betrachtungen und immer neuen Einwänden etc. :thumbdown:
    Oh, die hab ich total vergessen! =O
    Die werde ich mir gleich mal anschauen. Tut mir leid!

    EDIT: Naja, sein Beispiel verwendet My.Settings, und das möchte ich halt umgehen.
    Ich weiß, dass man via XML selber Einstellungen speichern kann, aber ich weiß halt nicht mehr wie.
    Am Ende sieht das ganze (von einem anderen Programm jetzt) so aus:

    XML-Quellcode

    1. <setting name="Kunde1" serializeAs="String">
    2. <value>Olive</value>
    3. </setting>


    Aber ich weiß halt nicht, wie das geht^^ Mehr such ich ja eigentlich nicht -.-
    Liebe Grüße
    sothere

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sothere“ ()

    Manno
    Bau Dir ne Klasse mit den von Dir gewünschten Properties, markiere diese Klasse als serialiserbar, binde deren Properties an. Deine Eigenschaften, und speichere nach Bedarf.
    Kannst Du nicht?
    Such hier im Forum nach den obigen Begriffen, ist alles schon ausführlich behandelt.