So, so gehts jetzt. Bei den Fonts und anderen nicht Serialisierbaren objekten wird man wohl die einzelnen beinhalteten objekte serialisieren müssen...
Sieht bei mir dann jetzt so aus (ich hoffe das wars jetzt ... )
Public Sub Load(ByVal Filename As String)
Dim ret = My.Settings.Setting1
Dim Delimiter() As String = {"%EOL%" & vbCrLf}
Dim Objects() As String = My.Computer.FileSystem.ReadAllText( _
Filename).Split(Delimiter, StringSplitOptions.RemoveEmptyEntries)
For Each Property_ As System.Configuration.SettingsPropertyValue In _
My.Settings.PropertyValues
For Each Item As String In Objects
Dim itemParts() As String = Split(Item, "%=%", 2)
If itemParts.Length = 2 Then
If Property_.Name = itemParts(0) Then
Try
Select Case Property_.PropertyValue.GetType.ToString
Case GetType(System.Drawing.Font).ToString
Dim Splits() As String = Split(itemParts( _
1), "%&%")
Dim Family As String = DeserializeObject( _
Splits(0), GetType(String))
Dim style As System.Drawing.FontStyle = _
DeserializeObject(Splits(1), style.GetType)
Dim Size As Single = DeserializeObject( _
Splits(2), Size.GetType)
Property_.PropertyValue = New Font(Family, _
Size, style)
Case Else
Property_.PropertyValue = DeserializeObject( _
itemParts(1), _
Property_.PropertyValue.GetType())
End Select
Catch ex As Exception
MsgBox(Property_.Name & " konnte nicht importiert" & _
"werden." & vbCrLf & ex.Message.ToString, _
MsgBoxStyle.OkOnly)
End Try
End If
End If
Next
Next
End Sub
Public Sub Save(ByVal Filename As String)
Dim ret = My.Settings.Setting1
Dim FileContent As String = String.Empty
For Each item As System.Configuration.SettingsPropertyValue In _
My.Settings.PropertyValues
Try
Select Case item.PropertyValue.GetType.ToString
Case GetType(System.Drawing.Font).ToString
Dim font1 As Font = item.PropertyValue
Dim FontFamilyNameSerialized As String = _
SerializeObject(font1.FontFamily.Name, _
font1.FontFamily.Name.GetType)
Dim FontStyleSerialized As String = SerializeObject( _
font1.Style, font1.Style.GetType)
Dim FontSizeSerialized As String = SerializeObject( _
font1.SizeInPoints, font1.SizeInPoints.GetType)
FileContent &= item.Name & "%=%" & _
FontFamilyNameSerialized & "%&%" & FontStyleSerialized _
& "%&%" & FontSizeSerialized & "%EOL%" & vbCrLf
Case Else
FileContent &= item.Name & "%=%" & SerializeObject( _
item.PropertyValue, item.PropertyValue.GetType) & _
"%EOL%" & vbCrLf
End Select
Catch ex As Exception
MsgBox(item.Name & " konnte nicht exportiert werden." & vbCrLf _
& ex.Message.ToString, MsgBoxStyle.OkOnly)
End Try
Next
My.Computer.FileSystem.WriteAllText(Filename, FileContent, False)
End Sub
Private Function SerializeObject(ByVal obj As Object, ByVal type As _
System.Type) As String
Dim sb As New System.Text.StringBuilder()
Dim myStream As New System.IO.StringWriter(sb)
Dim xmlSer As New System.Xml.Serialization.XmlSerializer(type)
xmlSer.Serialize(myStream, obj)
SerializeObject = sb.ToString
myStream.Close()
End Function
Private Function DeserializeObject(ByVal xmlString As String, ByVal Type As _
System.Type) As Object
Dim xmlSer As New System.Xml.Serialization.XmlSerializer(Type)
Dim myStream As New System.IO.StringReader(xmlString)
Return xmlSer.Deserialize(myStream)
myStream.Close()
End Function |