*thread mal wieder nach oben schieb
Moin.
So, nachdem ich es nun eine Weile hab schleifen lassen, hier nun mein Lösungsvorschlag. Damit kann man die Klasse schon einmal nur noch mit vergleichbaren Datentypenbenutzen, was soweit meinen Wünschen entsprach. Allerdings gibt es das Problem, dass man auch "höhere" Datentypen verwenden kann, sofern sie die passende Schnittstelle implementiert haben. Und das war es ja, was ich ausschließen wollte.
Die Klasse sollte Zugriffe auf eine Ini-Datei machen können, und die Daten zur besseren Validierung im jeweilis passenden Datentyp speichern können.
Da man den Datentyp T nicht beliebig umwandeln kann, musste intern mehr oder minder etwas zurecht gebastelt werden, womit ich noch nciht so ganz zufrieden bin. Für den Anfang funktioniert es aber immerhin. Vielleicht weiß ja wer, wie man es anständig lösen kann, ohne ein solches Gepfusche *selbstkritik üb*, oder eben auch nicht ...
Public Class Eintrag(Of T As IComparable(Of T))
Private pDatei As String
Private pSektion As String
Private pName As String
Private pStandard As Object
Private pWert As Object
Public Sub New(ByVal datei As IO.FileInfo, ByVal sektion As String, ByVal name _
As String, ByVal standard As T)
Me.pDatei = datei.FullName
Me.pSektion = sektion
Me.pName = name
Me.pStandard = standard
Me.pWert = standard
End Sub
Public Sub New(ByVal datei As IO.FileInfo, ByVal sektion As String, ByVal name _
As String, ByVal standard As T, ByVal wert As T)
MyClass.New(datei, sektion, name, standard)
Me.pWert = wert
End Sub
Public Function Lesen() As Boolean
Dim r As Integer
Dim sb As New System.Text.StringBuilder(1024)
Dim x As T ' Testvariable
Try
r = GetPrivateProfileString(Me.pSektion, Me.pName, Me.pStandard, sb, _
sb.Capacity, Me.pDatei)
Me.pWert = sb.ToString()
x = CType(Me.pWert, T) ' Test, ob Umwandlung von Object in T problemlos
' klappt
Return True
Catch ex As Exception
Me.Reset()
Return False
End Try
End Function
Public Function Schreiben() As Boolean
Try
Return WritePrivateProfileString(Me.pSektion, Me.pName, Me.pWert, Me.pDatei)
Catch ex As Exception
Return False
End Try
End Function
Public Sub Reset()
Me.pWert = Me.pStandard
End Sub
Public Function IsOf(ByVal items() As T) As Boolean
For Each item As T In items
If item.ToString() = Me.pWert.ToString() Then Return True
Next
Return False
End Function
Public ReadOnly Property Datei() As String
Get
Return Me.pDatei
End Get
End Property
Public ReadOnly Property Sektion() As String
Get
Return Me.pSektion
End Get
End Property
Public ReadOnly Property Name() As String
Get
Return Me.pName
End Get
End Property
Public ReadOnly Property Standard() As T
Get
Return CType(Me.pStandard, T)
End Get
End Property
Public Property Wert() As T
Get
Return CType(Me.pWert, T)
End Get
Set(ByVal value As T)
Me.pWert = CObj(value)
End Set
End Property
End Class
Friend Module API
<Runtime.InteropServices.DllImport("kernel32.dll", SetLastError:=True)> _
Public Function GetPrivateProfileString( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As System.Text.StringBuilder, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
End Function
<Runtime.InteropServices.DllImport("kernel32.dll", SetLastError:=True)> _
Public Function WritePrivateProfileString( _
ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As Boolean
End Function
End Module Bye.
Mika |