[VB.net]儲存控制項的內容到登錄表,下回可以自動取用

表單介面上,有時要保留使用者輸入資料的歷史記錄,已往我都是存到登錄表的應用程式區或是編碼後存成 Binary 檔,再於程開啟後在第一時間讀取。

  1. 表單介面上,有時要保留使用者輸入資料的歷史記錄,已往我都是存到登錄表的應用程式區或是編碼後存成 Binary 檔,再於程開啟後在第一時間讀取。
  2. VB.net 簡化了存取登錄表的動作,只要一行程式碼就能處理,不像 VB6 要宣告一堆 API。

表單開啟時自動讀入內容:

image

加入新內容後登錄內容立即更新:

image

 

程式碼很簡單(表單上拉二個 ComboBox 就可以測試了):



Public Class Form1
    Private 初始化進行中 As Boolean
    Private 程式名稱 As String = My.Application.Info.ProductName
    Private 公司名稱 As String = My.Application.Info.CompanyName
    Private 註冊表位置 As String = "Software\" & 公司名稱 & "\" & 程式名稱

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "使用者登入"
        下拉選單初始化(Me) '---讀入預存選單資料內容---
    End Sub

    Sub 下拉選單初始化(ByVal obj As Control)
        '-----下拉選單事件程序(從註冊表讀取選單資料並還原上一次開啟時的狀態)--------
        初始化進行中 = True
        For Each i In obj.Controls
            '---只針對下拉選單做處理---
            If TypeName(i) = "ComboBox" Then
                Dim c As ComboBox = CType(i, ComboBox)
                Dim s = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\" & 註冊表位置 & "\程式參數", i.name, "")
                If Not IsNothing(s) Then
                    c.Items.AddRange(s)
                    c.SelectedIndex = 0
                End If
            End If
            '---遞回處理---
            If i.controls.count > 0 Then
                下拉選單初始化(i)
            End If
        Next
        初始化進行中 = False
    End Sub
    Private Sub 離開選單時的動作(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.Leave, ComboBox2.Leave
        加入新項目(sender, sender.text)
    End Sub
    Sub 加入新項目(ByVal cmb As ComboBox, ByVal Text As String)
        '-----------------------------------------------
        ' 1. 若加入的內容是空項則離開程序-
        ' 2. 檢查 LIST 是否已有此資料,若已有就先移除
        '-----------------------------------------------
        If Text = "" Then Exit Sub
        If cmb.Items.Contains(Text) Then
            cmb.Items.Remove(Text)
        End If
        '--------------------------------------------------------------
        ' 1. 加入當下資料在最前面第0項(且確保是唯一的)
        ' 2. 然後再更新註冊表。
        ' 3. 因為用 Multi_SZ 儲存所以要先把選單內容 Copy 到字串陣列。
        ' 4. 最後寫入註冊表。
        '--------------------------------------------------------------
        Dim s() As String
        cmb.Items.Insert(0, Text)
        cmb.Text = Text
        If cmb.Items.Count > 0 Then
            '---存到註冊表---
            ReDim s(cmb.Items.Count - 1)
            cmb.Items.CopyTo(s, 0)
            My.Computer.Registry.SetValue("HKEY_CURRENT_USER\" & 註冊表位置 & "\程式參數", cmb.Name, s)
        End If
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Close()
    End Sub
End Class


ku3