كد ذخيره اطلاعات روي form در ويژوال بيسيك

saeidpes

New Member
با سلام خدمت دوستا ن عزيز


دكمه فرمان روي form ساخته شود كه با كليك روي آن بتوان تمام اطلاعات و داده ها را روي فرم ذخيره نمايد


متشكرم
 

saalek110

Well-Known Member
در این تاپیک:
http://forum.majidonline.com/showthread.php?t=38567
راجع به ذخیره در فایل گفته شده.

ولی راجع به ذخیره تمام اطلاعات روی فرم مبهم است. یعنی نفهمیدم چه چیز باید ذخیره شود.

اما مثلا اگر بخواهیم محتوای تکست باکس ها را ذخیره کنیم با روش زیر میشه اطلاعات یک تکست باکس را در یک متغیر ریخت تا بعدا در فایل ذخیره شود:
کد:
Private Sub Command1_Click()
mystring = Text1.Text
End Sub
 

the_king

مدیرکل انجمن
من یک کلاسی (Class) ساختم که به بهترین و ساده ترین شکل ممکن تغییراتی که کاربر در محتویات فرم ایجاد می کنه
را بصورت موقت در حافظه RAM و بصورت دائمی در درون یک فایل متنی ذخیره می کند.
و هر زمانی که اراده کنید دوباره فرم را به وضعیتی که در هنگام ذخیره شدن فرم قرار داشت، باز می گرداند.

نام این کلاس ClassFormBank است و تنها کدهایی که برای استفاده از آن لازم دارید اینها هستند :
در قدم اول بایستی یک نمونه از کلاس مذکور را بصورت یک متغیر درون کد فرم تعریف کنید :
کد:
Private FormBank As New ClassFormBank
این متن بالا اولین سطر برنامه در کد فرم تان خواهد بود تا نمونه کلاس FormBank را ایجاد کند.
اگر شما چندین فرم مختلف را در برنامه تان دارید، برای هر کدام از فرمها همین کد را در ابتدای آن اضافه خواهید کرد.

این کلاس برای شما سه فرمان (متد) را معرفی می کند که می توانید از آنها برای کنترل محتویات فرم استفاده کنید.
فرمان SaveForm :
این فرمان محتویات فرمی که به آن معرفی می کنید را ذخیره می کند و دو پارامتر ورودی دارد که دومی اختیاری است.
پارامتر اول فرمی است که باید ذخیره شود، مثلا Form1 یا Me که در واقع Me همواره نام فرمی خواهد بود که اکنون
در کد آن قرار دارید و فعال است.
پارامتر دوم که اختیاری است مسیر فایلی خواهد بود که یک نسخه از محتویات فرم در آن ذخیره می شود مثلا :
C:\FileName.txt
این یک فایل متنی است که این کلاس با ساختار آن بخوبی آشنا است و بعدا می تواند دوباره آنرا فراخوانی کند.
اگر پارامتر دوم را اعلام نکنید، محتویات فرم فقط در حافظه موقتی RAM ذخیره می شوند و با پایان یافتن اجرای
برنامه این اطلاعات پاک خواهند شد.

مثال هایی از کاربرد این فرمان اینچنین است :
کد:
FormBank.SaveForm Form1
FormBank.SaveForm Me
FormBank.SaveForm Me, "FileName.sav"

فرمان LoadForm :
این فرمان برعکس SaveForm عمل می کند و محتویات فرمی که قبلا ذخیره شده را بر روی فرم فعلی نمایش می دهد و
همانند SaveForm دو پارامتر ورودی دارد که دومی اختیاری است.
پارامتر اول فرمی است که باید اطلاعات در آن نمایش داده شود، مثلا Form1 یا Me که در واقع Me همواره نام فرمی خواهد بود
که اکنون در کد آن قرار دارید و فعال است.
پارامتر دوم که اختیاری است مسیر فایلی خواهد بود که محتویات فرم از داخل آن فراخوانی می شود مثلا :
C:\FileName.txt
اگر پارامتر دوم را اعلام نکنید، محتویات فرم از حافظه موقتی RAM فراخوانی می شوند.

مثال هایی از کاربرد این فرمان اینچنین است :
کد:
FormBank.LoadForm Form1
FormBank.LoadForm Me
FormBank.LoadForm Me, "FileName.sav"

فرمان ClearForm :
همانطور که از نام این فرمان پیداست، محتویات اطلاعاتی فرم را پاک می کند، مثلا داخل TextBox ها را خالی می کند
و یا تیک CheckBox ها بر می دارد.

مثال هایی از کاربرد این فرمان اینچنین است :
کد:
FormBank.ClearForm Form1
FormBank.ClearForm Me

حالا برویم سراغ تشریح عملکرد این کلاس :
در داخل این کلاس هیچ پیشفرضی از محتویات فرم شما وجود ندارد و برایش فرقی نمی کند که شما چند کنترل و به چه شکلی
را در فرمتان بکار برده اید.
تمام اطلاعاتی که این کلاس ذخیره و بازیابی می کند اینها هستند :
محتویات TextBox ها
تیک خوردگی CheckBox ها
انتخاب شدن و انتخاب نشدن OptionButton ها
آیتمی انتخاب شده در داخل ComboBox و ListBox ها

توجه کنید که فرمان ClearForm آیتم داخل ComboBox و ListBox را حذف و یا غیر فعالی می کند و نه لیست آیتم ها را.
دلیل این امر این است که طبق استدلال حقیر، قرار است اطلاعاتی ذخیره و یا پاک شوند که کاربر آنها را تغییر داده و
نه برنامه نویس.

چون این برنامه یک کلاس مستقل از فرم است، می تواند با بیش از یک نمونه و فرم بکار برود مثلا این کد پایین محتویات دو
فرم Form1 و Form2 که از نظر شکل فرم یکسان هستند را به سادگی تعویض می کند، مثلا اگر هم در فرم Form1 و
هم در فرم Form2 یک TextBox با نام Text1 داشته باشیم، این کد مقدار آندو را با هم عوض میکند.
کد:
    Dim A As New ClassFormBank
    Dim B As New ClassFormBank
    A.SaveForm Form1
    B.SaveForm Form2
    A.LoadForm Form2
    B.LoadForm Form1

کاربرد این کلاس حقیقتا ساده است ولی کد داخل خود آن پیچیده و در سطح حرفه ای است.

کد کامل کلاس به همراه یک فرم نمونه و فایل اجرایی EXE ضمیمه این پست می باشد.
 

پیوست ها

  • FormBank.zip
    12.3 کیلوبایت · بازدیدها: 361

Majid 3D

Member
امکان ذخیره کردن اطلاعات یک برنامه توسط کاربر

من یه برنامه درست کردم برای ثبت نام افراد ( مثلا در یک اردو ) ، ولی یه مشکلی هست ... فرض کنید کاربر بیست نفر رو برای اردو ثبت نام میکنه که در لیست باکس ذخیره شدن ولی اگه کاربر برنامه رو ببنده و دوباره بخواد اجرا کنه باید از اول اسامی بیست نفر رو وارد کنه !
من میخوام مثلا اسم پنج نفر رو وارد کرده و بعد یه کاری براش پیش اومده و از برنامه خارج شده، ولی وقتی دوباره برنامه رو باز میکنه از ادامه بتونه اسامی رو وارد کنه، یعنی اسم اون پنج نفر باشه.
همچین امکانی وجود داره ؟
 

saalek110

Well-Known Member
سلام.
شاید متدی داشته باشه ولی من فعلا پیدا نکردم.
یک راهش این است که دونه دونه بخونی و در یک فایل بنویسی و موقع شروع برنامه هم با بررسی وجود فایل از فایل بخونی و لیست باکس را پر کنی.
 

Majid 3D

Member
پست های the_king خیلی به دردم خورد،
ولی من میخوام اطلاعات یک لیست باکس رو ذخیره کنم. هیچ راهی نیست ؟ مثلا یک لیست باکس که حداکثر 40 اسم توش نوشته.
 

the_king

مدیرکل انجمن
کار مشکلی نیست. همانطور که saalek110 عزیز اشاره کردند بایستی آیتم های درون لیست باکس را یکی یکی
ذخیره کنید و در هنگام خواندن هم دوباره یکی یکی به لیست اضافه کنید.

فرض کنیم که شما یک لیست باکس به نام List1 دارید. کد زیر محتویات آنرا بصورت یک تک رشته String در می آورد :
کد:
    Dim Text As String
    Dim Index As Long
    Text = ""
    For Index = 0 To List1.ListCount - 1
        Text = Text & List1.List(Index) & vbCrLf
    Next
پس از اجرا شدن این کد، محتویات متغیر Text معادل تمامی محتویات List1 است.

برای بازگرداندن اطلاعات درون Text به داخل لیست باکس به کد زیر نیاز داریم :
کد:
    Dim List() As String
    Dim Index As Long
    List1.Clear
    If Len(Text) > 0 Then
        List = Split(Text, vbCrLf)
        For Index = 0 To UBound(List)
            If Len(List(Index)) > 0 Then List1.AddItem List(Index)
        Next
    End If

حالا بایستی این متغیر رشته ای را به شکلی ذخیره و بازیابی کنید.
مثلا با کد زیر آنرا در درون یک فایل ذخیره می کنیم :
کد:
    Open "file.txt" For Output As #1
    Print #1, Text
    Close #1

موقع خواندن آن از فایل بایستی از کد زیر استفاده کنید :
کد:
    Open "file.txt" For Binary As #1
    Text = Space(LOF(1))
    Get #1, 1, Text
    Close #1

یا با کد زیر آنرا در درون حافظه رجیستری ویندوز ذخیره می کنیم :
کد:
    SaveSetting App.Title, "Settings", "Text", Text

یا با کد زیر آنرا از درون حافظه رجیستری ویندوز می خوانیم :
کد:
    Text = GetSetting(App.Title, "Settings", "Text", "")

در برنامه نمونه ای که من نوشته ام از رجیستری ویندوز برای نگهداری محتویات لیست باکس استفاده شده است.



کد کامل برنامه به همراه فایل اجرایی ضمیمه این پست می باشد.
 

پیوست ها

  • SaveListBox.zip
    7.6 کیلوبایت · بازدیدها: 175

saeidpes

New Member
ثبت form

با سلام

كد برنامه اي مي خواهم كه تمام كنترل هاي ايجاد شده روي فرم با تمام اطلاعاتي كه به آن داده شده است را بتواند ثبت و ذخيره نمايد به طوري كه هر وقت وارد فرم مي شويم بتواند آن اطلاعات را نشان دهد

با تشكر
 

saeidpes

New Member
ثبت form

باسلام

كد برنامه اي مي خواهم كه تمام كنترل هاي ايجاد شده روي فرم با تمام اطلاعاتي كه به آن داده شده است را بتواند ثبت و ذخيره نمايد به طوري كه هر وقت وارد فرم مي شويم بتواند آن اطلاعات را نشان دهد

با تشكر
 

farhad110

Member
تمام كنترل هاي روي فرم چند 3 خصوصيت كلي براي نمايش دارند: left , top , name اين خصوصيات رو در فايلهاي ini يا ديتابيس يا ... ذخيره كنيد و هنگام نمايش فرم بازيابي كنيد. اگر مقادير كنترلها هم مورد نياز هست (به عنوان مثال caption يك label) مي تونيد اونها رو هم با توجه به نياز ذخيره كنيد
 

samangouei

New Member
با سلام و احترام
من یک برنامه دارم که اطلاعات یک textbox را میخونه و کاری انجام میده
یک دکمه گزاشتم که بشه اطلاعات تکست باکس را تغییر داد
مشکلم اینه که بعد از اجرا این تغییرات در تکست باکس ذخیره نمیشه و همون اطلاعات قبلی می مونه
لطفا راهنماییم کنین که یک دکمه به نام ذخیره تغییرات و وقتی روش کلییک می کنم اطلاعات تکست باکس در برنامه ( احتمالا باید در پروپرتیز تکست باکس ) ذخیره بشه
ممنون
 

the_king

مدیرکل انجمن
با سلام و احترام
من یک برنامه دارم که اطلاعات یک textbox را میخونه و کاری انجام میده
یک دکمه گزاشتم که بشه اطلاعات تکست باکس را تغییر داد
مشکلم اینه که بعد از اجرا این تغییرات در تکست باکس ذخیره نمیشه و همون اطلاعات قبلی می مونه
لطفا راهنماییم کنین که یک دکمه به نام ذخیره تغییرات و وقتی روش کلییک می کنم اطلاعات تکست باکس در برنامه ( احتمالا باید در پروپرتیز تکست باکس ) ذخیره بشه
ممنون
منظورتون از اینکه ذخیره نمیشه چیه؟ همون لحظه مقداری که داخل TextBox قرار می دهید رو نشون نمیده؟ یا اون لحظه نشون میده ولی بعد اینکه برنامه رو بستید و مجددا باز کردید نشون نمیده؟
تا کدی که برای تغییر مقدار بکار می برید نبینم نمیشه نظری بدم. کلا محتویات این پست قبلی رو اگه در برنامه تون پیاده سازی کنید برای اغلب کاربرد ها جواب میده : 3#
 

ari84

New Member
من خیلی دنبال این کد گشتم ولی یه راه بهتر پیداکردم که دیگهنیاز به برنامه نویسی نداره و ویژوال بیسیک براتون کد ش رو مینیویسه.
خوب برای این کار فقت لازمه یه بانک اطلاعاتی درست کنید داخل برنامه. راهش داخل ادرس زیر گفته:ایجاد یک پایگاه داده در ویژوال بیسیک 6 در عرض چند ثانیه
به همین راهتی من خودم امتحانش هنوز درست نکردم ولی به احتمال99 درصد وقتی برنامتون exe کنید .
 

ari84

New Member
من ی برنامه ساختم که دو تا لیست باکس داره من میخام دوتاشون سیو بشه .
بعدش اون بانک اطلاعتم که گفتم یاگیر میکنه یاکار نمیکنه .
این کدیم که مدیرکل انجمن گفته من هرکاری میکنم بار لیست باکسم کارنمیکنه اومدم داخل همون برنامه ایکه ساخته بودن کنارش ی لیست باکس درست کردم کدارو نوشتم بازم اجرانمیشد. منظورم برنامه ایه که مدیرکل انجمن در سال 2008 نوشته.
اگر کسی راه حل میدونه لطفا بگه چون خیلی واجبمه.
با تشکر از انجمن و همه .:)
 
آخرین ویرایش:

the_king

مدیرکل انجمن
من ی برنامه ساختم که دو تا لیست باکس داره من میخام دوتاشون سیو بشه .
بعدش اون بانک اطلاعتم که گفتم یاگیر میکنه یاکار نمیکنه .
این کدیم که مدیرکل انجمن گفته من هرکاری میکنم بار لیست باکسم کارنمیکنه اومدم داخل همون برنامه ایکه ساخته بودن کنارش ی لیست باکس درست کردم کدارو نوشتم بازم اجرانمیشد. منظورم برنامه ایه که مدیرکل انجمن در سال 2008 نوشته.
اگر کسی راه حل میدونه لطفا بگه چون خیلی واجبمه.
با تشکر از انجمن و همه .:)
لیست باکس رو که کاربر نمی تونه با مقدار پر کنه، چون داخلش قابل تایپ کردن نیست، برای همینه که اون کلاس آیتم های داخلش رو ذخیره نمی کنه، گزینه انتخاب شده رو ذخیره می کنه.
شما خودتون با کد نویسی محتویاتی به لیست باکس اضافه می کنید. همون موقع که به لیست باکس موردی رو اضافه کردید باید جایی، در فایلی، پایگاه داده ای و ... ذخیره اش کنید.
برای ذخیره کردن در فایل :
کد:
    Dim i As Integer
    Open "List1.txt" For Output As #1
    For i = 0 To List1.ListCount - 1
        Print #1, List1.List(i)
    Next
    Close #1
و برای خواندن از فایل :
کد:
    Dim Text As String
    List1.Clear
    If Dir("List1.txt") = "" Then Exit Sub
    Open "List1.txt" For Input As #1
    Do Until EOF(1)
        Line Input #1, Text
        List1.AddItem Text
    Loop
    Close #1
 

majofempir

New Member
سلام the_king عزیز

کد های شما خیلی بهم کمک کرد
اما من پیکچر باکس هم دارم که کاربر میتونه عکس داخلش آپ بکنه و میخواهم اون هم ذخیره بشود
متاسفانه با کد های شما سیو نشد و کار نکرد
لطفا راهنمایی بفرمایید
 

the_king

مدیرکل انجمن
سلام the_king عزیز

کد های شما خیلی بهم کمک کرد
اما من پیکچر باکس هم دارم که کاربر میتونه عکس داخلش آپ بکنه و میخواهم اون هم ذخیره بشود
متاسفانه با کد های شما سیو نشد و کار نکرد
لطفا راهنمایی بفرمایید
چیزی که میخواهید با ساختار کلاس مذکور همخوانی نداره. فایلی که ذخیره می کنه فرمت متنی ساده داره و برای ذخیره سازی داده باینری یک تصویر مناسب نیست.
 

majofempir

New Member
چیزی که میخواهید با ساختار کلاس مذکور همخوانی نداره. فایلی که ذخیره می کنه فرمت متنی ساده داره و برای ذخیره سازی داده باینری یک تصویر مناسب نیست.
بخوام فقط‌ آدرس پیکچر باکس رو ذخیره کنه بعد همون رو جایگزین کنه چی؟

یا اصلا بخوام پیکچری که یوزر آپ کرده رو سیو کنم باید چکار کنم؟؟

ممنون از پاسختون
 

the_king

مدیرکل انجمن
بخوام فقط‌ آدرس پیکچر باکس رو ذخیره کنه بعد همون رو جایگزین کنه چی؟

یا اصلا بخوام پیکچری که یوزر آپ کرده رو سیو کنم باید چکار کنم؟؟

ممنون از پاسختون
می توانید تصاویر داخل PictureBox هایی که فرضا روی خود فرم هستند روبا اسم خود PictureBox ذخیره کنید :
کد:
Private Sub Command1_Click()
    Dim i As Integer
    For i = 0 To Controls.Count - 1
        If TypeName(Controls(i)) = "PictureBox" Then
            SavePicture Controls(i).Image, Controls(i).Name & ".bmp"
        End If
    Next
End Sub
و مجددا بازیابی کنید :
کد:
Private Sub Command2_Click()
    Dim i As Integer
    For i = 0 To Controls.Count - 1
        If TypeName(Controls(i)) = "PictureBox" Then
            If Dir(Controls(i).Name & ".bmp") <> "" Then
                Set Controls(i).Picture = LoadPicture(Controls(i).Name & ".bmp")
            End If
        End If
    Next
End Sub
 

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

بالا