سیو اطلاعات فرم در vb و فراخوانی هنگام باز کردن برنامه

mohammad57

New Member
سلام دوستان.

من یک برنامه فرم ویژوال بیسیک نوشته ام که چندین txtbox داره.

میخوام وقتی برنامه ( فرم) بسته میشه ، مقادیر txtbox ها و lable ها سیو بشه

و از همه مهم تر اینکه زمانی که برنامه (فرم) مجددا باز شد، آخرین مقادیر سیو شده ، باز خوانی بشه

لازم به ذکر است که مقادیر فرم باید قابل ویرایش باشه. مثلا اولین بار ممکنه 1500 قرار بگیره و بعد از دوباره باز کردن ممکن هست لازم باشه که اون 1500 به 1600 تغییر کنه. در اینصورت میخام مقادیر جدید روی قبلی ها replace بشه.

با تشکر از شما
 

the_king

مدیرکل انجمن
سلام دوستان.

من یک برنامه فرم ویژوال بیسیک نوشته ام که چندین txtbox داره.

میخوام وقتی برنامه ( فرم) بسته میشه ، مقادیر txtbox ها و lable ها سیو بشه

و از همه مهم تر اینکه زمانی که برنامه (فرم) مجددا باز شد، آخرین مقادیر سیو شده ، باز خوانی بشه

لازم به ذکر است که مقادیر فرم باید قابل ویرایش باشه. مثلا اولین بار ممکنه 1500 قرار بگیره و بعد از دوباره باز کردن ممکن هست لازم باشه که اون 1500 به 1600 تغییر کنه. در اینصورت میخام مقادیر جدید روی قبلی ها replace بشه.

با تشکر از شما

مقدار label ها هم مگه تغییر می کنه؟

یکسری کد داخل فرم برای فراخوانی و ذخیره سازی داده لازم دارید (ابتدای کد فرم) :
کد:
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Private SettingsPath As String

Private Sub LoadFileData()
    Dim c As Control
    Dim line As String
    Dim pos As Integer
    Dim varname As String
    If PathFileExists(SettingsPath) = 0 Then Exit Sub
    Open SettingsPath For Input As #1
        Do Until EOF(1)
            Line Input #1, line
            pos = InStr(line, "=")
            If pos > 1 Then
                varname = Left(line, pos - 1)
                For Each c In Controls
                    If TypeName(c) = "TextBox" Then
                        If ControlName(c) = varname Then
                            c.Text = Mid(line, pos + 1)
                            Exit For
                        End If
                    End If
                Next
            End If
        Loop
    Close #1
End Sub

Private Sub SaveFileData()
    Dim c As Control
    Open SettingsPath For Output As #1
        For Each c In Controls
            If TypeName(c) = "TextBox" Then
                Print #1, ControlName(c) & "=" & c.Text
            End If
        Next
    Close #1
End Sub

Private Function ControlName(c As Object) As String
    If c.Parent.Controls(c.name) Is c Then
        ControlName = c.name
    Else
        ControlName = c.name & "(" & CStr(c.Index) & ")"
    End If
End Function

و در رخداد Load فرم روتین LoadFileData و در رخداد Unload فرم روتین SaveFileData را فراخوانی می کنید تا موقع بالا اومدن فرم اطلاعات رو از فایل بخونه و موقع بستن فرم ذخیره کنه.
کد:
Private Sub Form_Load()
    SettingsPath = App.Path & IIf(Right(App.Path, 1) = "\", "", "\") & "Settings.ini"
    [B][COLOR="#0000FF"]LoadFileData[/COLOR][/B]
End Sub

Private Sub Form_Unload(Cancel As Integer)
    [B][COLOR="#0000FF"]SaveFileData[/COLOR][/B]
End Sub
 

mohammad57

New Member
سلام و ممنون از راهنماییت
ولی من کد رو گذاشتم تو vb2012 اما به من ارور داد.
عکس رو براتون میگذارم . لطفا راهنمایی کنید
بازهم ممنون
attachment.php
attachment.php
 

پیوست ها

  • 1.JPG
    1.JPG
    161.6 کیلوبایت · بازدیدها: 4
  • 2.JPG
    2.JPG
    158.5 کیلوبایت · بازدیدها: 4

the_king

مدیرکل انجمن
سلام و ممنون از راهنماییت
ولی من کد رو گذاشتم تو vb2012 اما به من ارور داد.
عکس رو براتون میگذارم . لطفا راهنمایی کنید
بازهم ممنون
attachment.php
attachment.php

سوء تفاهم شده، خطا به این دلیله که زبان اش فرق می کنه، من کد Visual Basic نوشتم اما پروژه شما به زبان Visual Basic .Net ئه.

کد:
    Private settingsPath As String

    Private Sub LoadFileData()        
        If System.IO.File.Exists(settingsPath) = False Then Exit Sub
        Dim lines As String() = System.IO.File.ReadAllLines(settingsPath)
        For Each line As String In lines
            Dim pos As Integer = line.IndexOf("=")
            If pos > 0 Then
                Dim varname As String = line.Substring(0, pos)
                If Controls.ContainsKey(varname) Then
                    Controls.Item(varname).Text = line.Substring(pos + 1)
                End If
            End If
        Next
    End Sub

    Private Sub SaveFileData()
        Dim s As New System.Text.StringBuilder()
        For Each c As Control In Controls
            If TypeOf c Is TextBox Then
                s.AppendLine(c.Name + "=" + c.Text)
            End If
        Next
        System.IO.File.WriteAllText(settingsPath, s.ToString())
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        settingsPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Application.ExecutablePath), "Settings.ini")
        LoadFileData()
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        SaveFileData()
    End Sub
 

جدیدترین ارسال ها

بالا