Erstelle eine neue Klasse namens "IniAccess".
Public Class IniAccess
<System.Runtime.InteropServices.DllImport("kernel32.dll", _
SetLastError:=True)> _
Private Shared Function GetPrivateProfileString _
'...... ergänzen
End Function
<System.Runtime.InteropServices.DllImport("kernel32.dll", _
SetLastError:=True)> _
Private Shared Function WritePrivateProfileString _
'.......
End Function
Private Shared _IniFilename As String
Public Shared Property IniFileName() As String
Set(value As String)
If Not IO.File.Exists(value) Then
Throw New ArgumentException("Datei nicht vorhanden")
End If
_IniFilename = value
End Set
Get
Return _Inifilename
End Get
End Property
Private Shared Function CheckIniParams(section As String, _
Keyname As String) As Boolean
If Not IO.File.Exists(_IniFilename) Then Return False
If Not (IO.Path.GetExtension(_IniFilename).ToLower) = ".ini" Then _
Return False
If String.IsNullOrWhiteSpace(section) Then Return False
If String.IsNullOrWhiteSpace(Keyname) Then Return False
Return True
End Function
Public Shared Function SetStringToIni(Section As String, Keyname As String,
StringToIni As String) As Boolean
If Not CheckIniParams(Section, Keyname) Then Return False
Dim result As Integer = WritePrivateProfileString _
(Section, Keyname, StringToIni, _IniFilename)
Return result > 0
End Function
Public Shared Function GetStringFromIni _
(ByVal Section As String, keyname As String,
ByRef StringFromIni As String, _
Optional ByVal DefaultString As String = "leer") As Boolean
Dim defstring As String
If String.IsNullOrWhiteSpace(DefaultString) Then
defstring = "leer"
Else
defstring = DefaultString
End If
StringFromIni = defstring
If Not CheckIniParams(Section, keyname) Then Return False
Dim keyvalue As New System.Text.StringBuilder(1024)
Dim result As Integer = GetPrivateProfileString _
(Section, keyname, defstring, keyvalue, _
keyvalue.Capacity, _IniFilename)
If result = 0 Then
Return False
Else
StringFromIni = keyvalue.ToString
Return True
End If
End Function
Public Shared Function SetColorToIni _
(Section As String, Keyname As String, _
ColorToSet As System.Drawing.Color) As Boolean
If Not CheckIniParams(Section, Keyname) Then Return False
Dim keyvalue As String = ColorToSet.ToArgb.ToString()
Return SetStringToIni(Section, Keyname, keyvalue)
End Function
Public Shared Function GetColorFromIni _
(Section As String, Keyname As String,
ByRef ColorFromIni As System.Drawing.Color, _
Optional ByVal Defaultcolor As Color = Nothing) As Boolean
ColorFromIni = Defaultcolor
If Not CheckIniParams(Section, Keyname) Then Return False
Dim defcolor As String
If Defaultcolor = Nothing Then
defcolor = Color.White.ToArgb.ToString
Else
defcolor = Defaultcolor.ToArgb.ToString
End If
Dim keyvalue As String = ""
If GetStringFromIni(Section, Keyname, keyvalue, defcolor) Then
Try
ColorFromIni = Color.FromArgb(CInt(keyvalue.ToString))
Catch
Return False
End Try
Return True
Else
Return False
End If
End Function
End Class Im Load-Eventhandler des Starformulars weist Du den Pfad der Ini-Datei
auf diese Klasse zu:
Dim IniFilename As String = _ IO.Path.Combine _
(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, _
"Einstellungen.ini")
IniAccess.IniFileName = IniFilename Überall in Deinem Projekt ist es möglich zuzuweisen und abzufragen:
'Zuweisung:
Dim section As String = "Farbeinstellungen"
Dim keyname As String = "Hintergrundfarbe"
Dim Usercolor as Color
'ggf. zunächst Dialogabfrage der Farbe (UserColor)
'dann:
IniAccess.SetColorToIni(section, keyname, usercolor)
'Abfrage:
'optional kann eine DefaultColor vorgegeben werden
Dim IniColor as Color
IniAccess.GetColorFromIni(section, keyname, inicolor)
PbAnzeige.BackColor = inicolor |