| |
VB.NET - Ein- und UmsteigerSerialisierung | | | Autor: Schü | Datum: 03.09.08 19:04 |
| Hallo nochmal!
Kann mann ein gefülltes ListView-Element mit allen Items und Subitems inkl. der Spaltenbreiten oder Icons ohne weiteres in eine Datei serialisieren, um es z.B. per Button wieder aus einer Datei zu laden? Im Prinzip ein leeres Listview per Code aus einer Datei füllen, die vorher von einem Anderen ListView abgespeichert wurde.
Oder geht das nur Schritt für Schritt? Also ColumnHeaderCollection auslesen und anlegen, Items auslesen und anlegern etc.....
Schü | |
Re: Serialisierung | | | Autor: icetea123 | Datum: 03.09.08 19:41 |
| Das ganze auf einmal Serialisieren macht keinen Sinn, da z.B. die Parent Eigenschaft nicht serialisiert werden kann. Aber wenn du einzeln die Collections (l.Items, l.Coloumns, l.Groups usw) serialisierst müsste es klappen (Richtige Reihenfolge beachten, beim schreiben erst Coloumns dann Groups, dann Items, beim Lesen erst Coloumns, dann Groups, dann Items)
MfG,
icetea
-----------------------------------
Betriebssystem: Schrott (Vista)
Entwicklungsumgebung: VS 2008
| |
Re: Serialisierung | | | Autor: Schü | Datum: 03.09.08 19:58 |
| Hmm...
Das dachte ich.
Kannst Du mir ein Grundgerüst empfehlen, wie mann z.B. die ColumnHeaderCollection schreibt und liest?
Schü | |
Re: Serialisierung | | | Autor: keco | Datum: 03.09.08 20:14 |
| Du kannst dir selbst eine Klasse schreiben, in denen du die benötigten Propertys hast (in dem Falle die genannten 3) und anschließend diese Klasse serialisierst. | |
Re: Serialisierung | | | Autor: Schü | Datum: 03.09.08 21:03 |
| Hast du ein kurzes Beispiel?? | |
Re: Serialisierung | | | Autor: Schü | Datum: 03.09.08 22:20 |
| Wie kann man diese 3 Klassen denn hintereinander in die selbe Datei schreiben?
Das kann man doch nicht wieder auslesen, da die Werte der klassen doch immer verschieden sind? oder?
Schü | |
Re: Serialisierung | | | Autor: keco | Datum: 04.09.08 00:24 |
| Du erstellst eine Klasse mit den nötigen Eigenschaften (das Beispiel hat nur die ListViewItems; ColumnHeader und ListViewGroup musst du noch selbst hinzufügen):
<System.Serializable()> _
Public Class MyListViewSources
Private pItems As ListViewItem()
Public Sub New(ByVal Items As ListViewItem())
pItems = Items
End Sub
Public Property Items() As ListViewItem()
Get
Return Me.pItems
End Get
Set(ByVal value As ListViewItem())
Me.pItems = value
End Set
End Property
Public Sub Save()
Dim fs As New IO.FileStream(Application.UserAppDataPath & "\lvdata.dat", _
IO.FileMode.Create)
Dim formatter As New _
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Try
formatter.Serialize(fs, Me)
Catch ex As Exception
MsgBox(ex.Message)
Finally
fs.Close()
End Try
End Sub
Public Shared Function Load() As MyListViewSources
Dim fs As New IO.FileStream(Application.UserAppDataPath & "\lvdata.dat", _
IO.FileMode.Open)
Dim formatter As New _
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Try
Return DirectCast(formatter.Deserialize(fs), MyListViewSources)
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
Finally
fs.Close()
End Try
End Function
End Class Die Klasse muss als Serializable eingestellt werden und schon steht dem Speichern und Laden nichts mehr im Wege.
Speichern und Laden kannst du wie folgt:
Public Class Form2
Private lvSources As MyListViewSources
' Speichern
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
' Array von ListViewItem erstellen
Dim arr(ListView1.Items.Count - 1) As ListViewItem
' Items aus dem ListView in das Array kopieren
ListView1.Items.CopyTo(arr, 0)
' Neue Instanz erstellen und Array übergeben
lvSources = New MyListViewSources(arr)
' Speichern
lvSources.Save()
End Sub
' Laden
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button2.Click
' Laden
lvSources = MyListViewSources.Load()
' Jedes Item in das ListView hinzufügen, ggf. ListView1.Items.Clear()
' aufrufen
For Each item As ListViewItem In lvSources.Items
ListView1.Items.Add(item)
Next
End Sub
End Class Das sollte dann alles so funktionieren. | |
Re: Serialisierung | | | Autor: Schü | Datum: 04.09.08 08:44 |
| OK.
Danke für die ausführliche Hilfe!
Ich schau mir das mal in Ruhe an.
Schü | |
Re: Serialisierung | | | Autor: Schü | Datum: 04.09.08 16:58 |
| Hi!
Wenn ich das richtig verstehe, erzeugst du ein Klasse, die eine Kopie der Listviewitems als array 'beherbergt' und diese Klasse wird dann durch das NET Framework serialisiert. Das ganze von ausserhalb der ListView-Klasse OK. Klar soweit.
Ich habe 2 Fragen dazu:
1.) kann mann diese Klasse/Funktionen (Load/Save) auch direkt als Funktion der Listview-Klasse implementieren?
Ich habe nähmlich eine eigene ListView-Klasse, die vom NET-Steuerelement vererbt ist und weitere Funktionen hat. Ich hätte gern so oder so ähnlich aufgerufen:
myListView.Load() und myListView.Save()
und alles dann intern in der Klasse abwickeln. Das müsste doch gehen, da in meinem ListView auch die ColumnHeaderCollection und die ListViewItemCollection vererbt sind, könnte man doch diese Collections auch gleich als serialisierbar kennzeichnen und serialisieren??
2.) Ich möchte diese Daten alle in eine Datei schreiben. Also wenn ich nun die Items gespeichert habe würden zunächst die ColumnHeader folgen (oder umgekehrt) und dann die Groups etc. ...
Ich sehe nur nicht wie ich hinereinander mehrere Objekte in die selbe Datei schreibe (und wieder lesen kann)
Schü | |
Re: Serialisierung | | | Autor: icetea123 | Datum: 04.09.08 18:41 |
| Ja das geht.
Das gleiche wie oben beschrieben, nur mit Me.* statt mit list.*
MfG,
icetea
-----------------------------------
Betriebssystem: Schrott (Vista)
Entwicklungsumgebung: VS 2008
| |
Re: Serialisierung | | | Autor: Schü | Datum: 04.09.08 19:42 |
| OK, Danke!
und Frage 2?
Schü | |
Re: Serialisierung | | | Autor: keco | Datum: 05.09.08 18:59 |
| Frage 1.) Wenn du dein eigenes ListView hast, welches von ListView erbt, dann kannst du die Funktionen integrieren und entsprechend, wie icetea123 schrieb, umändern.
Frage 2.) Die Daten werden alle schon in eine Datei geschrieben, binär. Wenn du die Columns und Groups auch speichern willst, dann lege einfach nur die entsprechenden Properties an und ruf die .Save bzw. .Load-Methode auf. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|