vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Dateisystem · INI-Dateien   |   VB-Versionen: VB4, VB5, VB605.09.01
Control-Inhalte speichern und abrufen

Zwei Funktionen, mit denen sich die Inhalte von Eingabecontrols einer Form speichern und bei Bedarf wieder lesen lassen.

Autor:   Dieter OtterBewertung:  Views:  21.604 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Mit den beiden nachfolgenden Routinen lassen sich Bildschirm-Eingabemasken temporär speichern und jederzeit wiederherstellen. Berücksichtigt werden Textboxen, Option- und Checkboxen sowie horizontale und vertikale Scrollbalken.

Die einzelnen Werte der Controls werden hierbei in einer INI-Datei gespeichert und von dort aus auch wieder ausgelesen. Der Zugriff auf die INI-Datei erfolgt hierbei über die beiden WinAPI-Funktionen WritePrivateProfileString und GetPrivateProfileString. Diese beiden, sowie alle nachfolgenden Funktionen deklarieren Sie am besten in einem Modul:

' zunächst die benötigten API-Funktionen
Public Declare Function GetPrivateProfileString Lib "kernel32" _
  Alias "GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long
 
Public Declare Function WritePrivateProfileString Lib "kernel32" _
  Alias "WritePrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As Any, _
  ByVal lpString As Any, _
  ByVal lpFileName As String) As Long
 
' INI-Datei
Public MyIniFile As String
 
Public Sub Main()
  MyIniFile = App.Path & "\Controls.ini"
End Sub

Werte der Eingabecontrols eines Formulars speichern
Das Ermitteln aller vorhandenen und unterstützten Eingabecontrols erfolgt über die Controls-Auflistung. Mit TypeOf wird hierbei der Typ des Controls geprüft. Die Inhalte werden folgendermassen in der INI-Datei gespeichert:

[Controls]
Name=Inhalt

Handelt es sich bei dem Control um ein Steuerelementfeld (also mit gesetzter Index-Eigenschaft), so wird der Index direkt hinter dem Controlnamen in runden Klammern angegeben.

' Inhalte der Controls speichern
Public Sub SaveCtrlsTemp(ByVal Form As Form, _
  ByVal IniSection As String)
 
  Dim Ctl As Control
  Dim x As String
  Dim value As String
 
  ' Alle Controls der übergebenen Form durchlaufen
  For Each Ctl In Form.Controls
    With Ctl
      x = .Name
 
      ' Prüfen, ob Steuerelementfeld (Array)
      On Local Error Resume Next
      x = x & "(" & CStr(.Index) & ")"
      On Local Error GoTo 0
    End With
 
    value = vbNullString
 
    If TypeOf Ctl Is TextBox Then
      ' TextBox
      value = Ctl.Text
    ElseIf TypeOf Ctl Is HScrollBar Or _
      TypeOf Ctl Is VScrollBar Then
      ' horiz./vertik. Scrollbar
      value = CStr(Ctl.value)
    ElseIf TypeOf Ctl Is OptionButton Or _
      TypeOf Ctl Is CheckBox Then
      ' OptionButton/CheckBox
      value = CStr(Ctl.value)
    Else
      ' kann beliebig erweitert werden
    End If
 
    ' Inhalt/Wert speichern
    If value <> vbNullString Then
      WritePrivateProfileString IniSection, x, value, MyIniFile
    End If
  Next
End Sub

Die Prozedur erwartet zwei Paramater:
Form - Form-ObjektIniSection - Name des Abschnitts der INI-Datei

Gespeicherte Werte auslesen und Control-Inhalte wiederherstellen
Das Wiederherstellen gespeicherter Control-Inhalte erfolgt in ähnlicher Weise wie beim Speichern. Es wird auch hier die Controls-Auflistung durchlaufen und mit TypeOf geprüft, ob es sich um ein unterstütztes Control handelt. Per GetPrivateProfileString wird der Inhalt aus der INI-Datei ausgelesen und im Control angezeigt.

' Inhalte der Controls lesen
Public Sub RestoreCtrlsTemp(ByVal Form As Form, _
  ByVal IniSection As String)  
 
  Dim Ctl As Control
  Dim x As String
  Dim value As String
  Dim lRet As Long
 
  ' Alle Controls der übergebenen Form durchlaufen
  For Each Ctl In Form.Controls
    With Ctl
      x = .Name
 
      ' Prüfen, ob Steuerelementfeld (Array)
      On Local Error Resume Next
      x = x & "(" & CStr(.Index) & ")"
      On Local Error GoTo 0
    End With
 
    value = Space$(256)
    lRet = GetPrivateProfileString(IniSection, x, vbNullString, _
      value, Len(value), MyIniFile)
    If lRet <> 0 Then
      value = Left$(value, lRet)
      If TypeOf Ctl Is TextBox Then
        ' TextBox
        Ctl.Text = value
      ElseIf TypeOf Ctl Is HScrollBar Or _
        TypeOf Ctl Is VScrollBar Then
        ' horiz./vertik. Scrollbar
        Ctl.value = CInt(value)
      ElseIf TypeOf Ctl Is OptionButton Then
        ' OptionButton
        Ctl.value = CBool(value)
      ElseIf TypeOf Ctl Is CheckBox Then
        ' CheckBox
        Ctl.value = CInt(value)
      Else
        ' Kann beliebig erweitert werden
      End If
    End If
  Next
End Sub

Beispiel
Im nachfolgenden Beispiel wird versucht beim Laden der Form die zuletzt gespeicherten Control-Inhalte wiederherzustellen, welche beim Beenden der Form gespeichert wurden.

Private Sub Form_Load()
  ' Control-Inhalte wiederherstellen
  RestoreCtrlsTemp Me, "Controls Form1"
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
  ' Control-Inhalt speichern
  SaveCtrlsTemp Me, "Controls Form1"
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.