vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück
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:     [ Jetzt bewerten ]Views:  20.229 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 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

Dieser Tipp wurde bereits 20.229 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2021 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