none
Zwischenspeichern eines Referenztyps RRS feed

  • Frage


  • Hallo,
    ich möchte für ein Programm mit mehreren Tabs eine Änderungsüberwachung für mehrere Steuerelemente einbauen, d.h. wenn zwischen zwei "Besuchen" auf einem Tab an einem Steuerlement (auch auf anderen Tabs) etwas verändert wurde, möchte ich das Abfangen und dementsprechend behandeln können.
    Für recht einfache Steuerelemente, wie z.B. eine ComboBox ist das auch kein Problem - ich kann den ausgewählten Wert in einem String (bzw. wenn ich das für jeden Tab einzeln haben möchte in einem String-Array mit so vielen Elementen wie Tab Pages) speichern, im entscheidenden Moment den Wert des String mit dem ausgewählten Wert der ComboBox vergleichen und nach der entsprechenden Operation mit dem =-Operator dem Speicherstring den neuen (aktuellen) Wert der ComboBox-Auswahl zuweisen.

    dim strOldValue as string
    
    private sub test ()
    if ComboBox1.Text <> strOldValue then
    'do something
    strOldValue = ComboBox1.Text
    else
    'do nothing or something else
    end if
    end sub
    


    Habe ich aber nun ein komplizierteres Gebilde, z.B. eine CheckedItemCollection einer CheckedListBox zwischenzuspeichern, so funktioniert das nicht mehr. Zum einen muss ich als Vergleichsoperator .Equals einstetzen, da "=" zum Vergleich für CheckedItemCollection nicht definiert ist, aber - und das wiegt deutlich schwerer - selbst dann geht es nicht, da es bei der Speicherung mit dem =-Operator offenbar zu einer Referenz- und nicht zu einer Wertezuweisung kommt. Damit funktioniert natürlich nach dem 1. Durchlauf die Änderungsüberwachung nicht mehr, da sich der Wert der Speichervariablen auch immer mit ändert. Ein Umwandeln in ein String-Array wäre theoretisch denkbar, würde aber mit viel unelegantem Schreiben einher gehen, insbesondere dann, wenn ich das für jeden Tab machen will und damit mehrere dieser Speichervariablen in einem Array mehrfach vorhalten möchte.

    Ist dafür eine elegante Lösung bekannt?

    Grüße und Danke, TS
    Freitag, 16. Oktober 2009 12:24

Antworten

Alle Antworten

  • Hallo Tobias,

    ich arbeite bei solchen Dingen immer mit einer ArrayList (Typ object), in die ich die Objekte schreibe. Anschließend serialisiere bzw. deserialisiere ich die ArrayList dann zum Speichern bzw. Auslesen.

    Infos zur Serialisierung gibts hier http://msdn.microsoft.com/de-de/library/system.runtime.serialization.formatters.binary.binaryformatter.aspx

    So kannst du auch Steuerelemente oder ganze Forms in eine ArrayList schreiben und serialisieren. Beim Deserialisieren holst du dir dann zum Beispiel das gesamte Tab aus der ArrayList. Dann brauchst du nicht mal jedes einzelne Steuerelement auswerten.

    Viele Grüße
    Jan
    Sonntag, 18. Oktober 2009 10:18
  • Hallo Tobias,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Montag, 26. Oktober 2009 21:09
    Moderator