# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET > آموزش: آموزش  Settings (حتما بخونید)

## Hybrid

با سلام خدمت دوستان عزیز ، امیدوارم حالتون خوب باشه ، با توجه به اینکه چند باری در رابطه با این مبحث دوستان تاپیک زدن گفتم آموزش کوچک و مفیدی رو در این تاپیک در رابطه با این مطلب ارائه کنم امیدوارم مفید واقع بشه.خوده دوستان هم اگه مطلب اضافه ای در این رابطه دارن میتونن واسه بقیه بزارن تا یک تاپیک جامع در رابطه با این مطلب بشه.

آموزش Application Settings : 

نوعی متغیر در چارچوب .net وجود داره که امکان ذخیره سازی داده ها رو حتی پس از اینکه برنامه رو میبندید رو در خودش داره ، یعنی راحت میتونین مقداری رو در این متغیر ها ذخیره کنین و در مراجعات بعدی به برنامتون ازشون استفاده کنین ، کاربردشون خوب معلومه مثلا میتونین برای نگهداری تنظیمات برنامه اگر تعدادشون کم باشه خیلی راحت استفاده کنین .

برای ساخت یک نمونه از این فیلد ها به ترتیب مراحل زیر رو برید : 

1 ) در پنجره Solution Explorer رو My Project دابل کلیک کنین.

2 ) در پنجره باز شده به تب Settings برید.



حالا بعد از اینکه مراحل بالا رو رفتین باید برای ساخت یک فیلد به ترتیب گزینه های زیر رو پر کنین :

Name : هر فیلد باید دارای یک نام باشد از این گزینه برای اینکار استفاده کنین.

Type : هر فیلد باید دارای یک نوع هم باشد یعنی باید به ویژوال استودیو بگین که قصد دارین داخل این فیلد چه نوع داده ای رو قرار بدین داده هایی از جمله String ، Integer ، و.. رو میتونین از طریق این گزینه انتخاب نمایید.

Scope : این گزینه نوع دسترسی به فیلد را مشخص میکند و  دارای 2 نوع Application و User هست که به ترتیب در زیر توضیح دادن شدن.

*** Application :* امکان تغییر داده های فیلد در* زمان اجرا وجود نداره* و معمولا برای نگهداری *رشته های اتصال ( Connection string )* به کار میرود.

**** *User :* امکان تغییر مقدار فیلد* در زمان اجرا* وجود دارد.

Value : مقداری به عنوان *پیشفرض* برای نوع فیلد های User و *مقدار فیلد* با نوع دسترسی Application را تعیین میکند.


دسترسی به Application Setting ها در کد نویسی : 

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

*نام فیلد.My.Settings*

جهت مقدار دهی در زمان اجرا از شکل زیر استفاده کنین :
*
مقدار=نام فیلد.My.Settings*


بعد از اینکه مقدار تمام فیلد ها رو دادین باید ذخیرشون کنین :

My.Settings.Save()


نمونه مثال ساده :

----------


## tam2145

نکته :
بعد از اینکه مقدار متغییر را تغییر دادید ، باید ان را ذخیره کنید !! برای این کار از کد زیر استفاده کنید .
My.Settings.Save()

----------


## Hybrid

> نکته :
> بعد از اینکه مقدار متغییر را تغییر دادید ، باید ان را ذخیره کنید !! برای این کار از کد زیر استفاده کنید .
> My.Settings.Save()


اصل مطلب رو که یادم رفت بگم!! ،* با تشکر از دقتتون.*

----------


## Saman_12

با جابجایی محل برنامه تنظیمات پاک میشن میتونید امتحان کنید.(یه کپی ازش بگیرید و جای دیگه ذخیره کنید پاک شدن.)

----------


## Heidari66

راست میگه با کپی یا جابچایی برنامه تنظیمات از بین میره...

بهرحال تنظیمات اینجا ذخیره میشه :  C:\Users\Heidari\AppData\Local\Microsoft

----------


## googoli

با سلام 
من اولین بار هست که می خوام از متغیرApplication Setting استفاده کنم و تکه کد زیر رو نوشتم ولی با خطا مواجه میشم میشه من رو راهنمایی کنید 


        private void btnPrint_Click(object sender, EventArgs e)
        {
            hesabdari.Properties.Settings amir = new hesabdari.Properties.Settings();
            amir.Svar = txtOnvan.Text.ToString().Trim();
            Properties.Settings.Default["Svar"] = amir;
            Properties.Settings.Default.Save();
        }

        private void buttonItem1_Click(object sender, EventArgs e)
        {
            hesabdari.Properties.Settings amir = new hesabdari.Properties.Settings();
            amir = (hesabdari.Properties.Settings)hesabdari.Propertie  s.Settings.Default["Svar"];
            MessageBox.Show(amir.Svar.ToString());
        }


این خط ها رو برای من ارور می گیره
 Properties.Settings.Default["Svar"] = amir;
amir = (hesabdari.Properties.Settings)hesabdari.Propertie  s.Settings.Default["Svar"];

----------


## Hybrid

سلام دوست عزیز امیدوارم حالت خوب باشه ، 

واسمون خط به خط کدت رو توضیح بده ، تا خودتون مشکل خودتون رو پیدا کنید.

از این کدی که نوشتین چه انتظاری دارین ؟؟؟ میخواین به وسیله ی این کد چه کاری رو انجام بدین؟

.

----------


## googoli

من میخوام یه متغیر داشته باشم که یه سری تنظیمات رو درون اون داشته باشم 
با این نوع متغیر اشنایی چندانی ندارم فقط مطالب همین جا بود که من خاصیت های این متغیر رو فهمیدم 
با برداشت هایی از این جا ویک وبلاگ که این تکه کد رو درون اونجا پیدا کردم خواستم این کار رو انجام بدم ولی با ارور مواجه شدم 
حالا اگه میشه شما من رو راهنمایی کنید تا درک درستی از این مطلب داشته باشم

----------


## googoli

اقا ممنون 
من از یه وب سایت رفرنس جوابم رو پیدا کردم 
مشکل من این بود که به وبلاگ های ایرانی مراجعه کردم و لقمه رو دور سر خودم گردوندم

----------


## xxnagin

سلام 
مثلا شما با این کد میتونید Location فرم1 رو save کنید و فرم  را از هر جایی که بسته شده جرا کنید
 یه فیلد به نام  form1location  و حالت type رو به System.Drawing.Point تغییر بدید
می بینید که فرم را وقتی جا به جا میکنید و فرم را ببندید دوباره اجرا کنید میبنید که فرم از کجا load می شه

 Public class Form1
 Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
 My.Settings.Save()
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
My.Settings.form1location = Me.Location
 End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Location = My.Settings.form1location
End Sub
End Class

----------


## Veteran

تابع savesetting و getsetting هم کار مشابه رو میکنن و میشه مقدار رو  سیو کرد توی رجیستری.

----------


## کاظم فلاحی خواه

فایل زیر شاید بدردت بخورد .
1.rar

----------


## کاظم فلاحی خواه

برای تنظیم مجدد کردن تنظیمات (داده ی ذخیره شده بجای داده ی پر شده در متغیر ذخیره سازی) از کد زیر استفاده می کنیم :

My.Settings.Reload()


برای دسترسی راحت تر به متغیر های ذخیره سازی :

مثلا ذخیره سازی Location فرم یا هر خصوصیت کنترل دیگری :
با توجه به دو متغیر یکی برای ذخیره کردن متن textbox و دیگری برای ذخیره سازی location فرم

Untitled.png

به تصاویر زیر نگاه کنید :

به پنجره ی خصوصیات فرم می رویم و 
Untitled2.png
Untitled3.png
تصویر (شماره ی 4)*نکته ی کنکوری
Untitled4.png
Untitled5.png

انتخاب متغیر ذخیره سازی برای خصوصیت فرم آسون بود 

تنها کاری که مونده ذخیره سازی است --> 
My.Settings.Save()



اما در آخر برای دستیابی به دیگر خصوصیات در خصوصیت Aplication Settingهر شی روی PropertiBinding
کلیک کنید و خصوصیات دیگر رو هم می تونید ذخیره کنید در ضمن اگر متغیر ذخیره سازی در setting ایجاد نکرده اید همان جا (PropertiBinding)با کلیک روی (...New) (تصویر 3 نکته ی ستاره دار )متغیر ذخیره سازی را ایجاد و برای خصوصیت شی مورد نظر انتخاب کنید .

----------


## barnamenevisforme

سلام
اگه بخوایم connection string رو از این روش در زمان اجرا تغییر بدیم به نظر شما راهی وجود داره؟
توضیح این که connection string فقط application scope رو داره.ممنون.

----------


## کاظم فلاحی خواه

این متغیر ها رو برای شی های که خصوصیت اونها بهشون نیاز دارند ایجادکردن می تونی  متغیر ذخیره شده application scope رو از setting حذف کنی و متغیر user ایجاد کنی و Value متغیر حذف قبلی رو بجای اون بزاری اما هنگامی که برنامه رو اجرا می کنی خطا می ده مثل اینکه که شما بخواهید خصوصیت شی گرای یک کنترل رو زمانی که برنامه درحال debug یابی هستیم رو تغییر بدیم اما بجای اون فکر کنم باید تعریف  OleDbConnection جدید بکنی تا درست بشه .

----------


## Yanehsar

با سلام 
برای در اختیار قرار دادن چند اختیار برای کاربرمون(رنگ،فونت و...)باید چندین متغییر تعریف کرد آیا امکان تعریف ارایه هم وجود دارد؟؟؟یا نه؟

----------


## Hybrid

> با سلام 
> برای در اختیار قرار دادن چند اختیار برای کاربرمون(رنگ،فونت و...)باید چندین متغییر تعریف کرد آیا امکان تعریف ارایه هم وجود دارد؟؟؟یا نه؟


سلام ، میتونین از StringCollection استفاده کنید یا از نوع 

system.collections.arraylist

StringCollection راحتتره.

----------


## NasimBamdad

> با سلام خدمت دوستان عزیز ، امیدوارم حالتون خوب باشه ، با توجه به اینکه چند باری در رابطه با این مبحث دوستان تاپیک زدن گفتم آموزش کوچک و مفیدی رو در این تاپیک در رابطه با این مطلب ارائه کنم امیدوارم مفید واقع بشه.خوده دوستان هم اگه مطلب اضافه ای در این رابطه دارن میتونن واسه بقیه بزارن تا یک تاپیک جامع در رابطه با این مطلب بشه.
> 
> آموزش Application Settings : 
> 
> نوعی متغیر در چارچوب .net وجود داره که امکان ذخیره سازی داده ها رو حتی پس از اینکه برنامه رو میبندید رو در خودش داره ، یعنی راحت میتونین مقداری رو در این متغیر ها ذخیره کنین و در مراجعات بعدی به برنامتون ازشون استفاده کنین ، کاربردشون خوب معلومه مثلا میتونین برای نگهداری تنظیمات برنامه اگر تعدادشون کم باشه خیلی راحت استفاده کنین .
> 
> برای ساخت یک نمونه از این فیلد ها به ترتیب مراحل زیر رو برید : 
> 
> 1 ) در پنجره Solution Explorer رو My Project دابل کلیک کنین.
> ...



بی زحمت SAMPLE سی شارپ رو هم بزارید

----------


## xxnagin

اینم نمونه  #c  که برای ذخیره مکان form هستش  
نمونه vb.net همین کد 
تو  #C  از   Properties.Settings.Default   تو vb.net از   My.Settings استفاده میشه




     private void Form1_Load(object sender, EventArgs e)
        {
                        this.Location = Properties.Settings.Default.location;
          }
 
                private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
              Properties.Settings.Default.location  = this.Location;
                  }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
                       Properties.Settings.Default.Save();
                    }
            }

----------


## ROSTAM2

:متفکر:  


> اقا ممنون 
>  من از یه وب سایت رفرنس جوابم رو پیدا کردم 
>  مشکل من این بود که به وبلاگ های ایرانی مراجعه کردم و لقمه رو دور سر خودم گردوندم


  :متفکر: 

تا حالا شده بخواید به SETTINGS آیتم اضافه کنید برنامه VS هنگام اجرای پروژه گیر بده که تنظیمات برنامه فضای کافی برای ثبت اطلاعات نداره؟

----------


## NasimBamdad

من نمی تونم نوع SCOPE رو تغییر بدم ، چی کار باید کرد ؟ 

لطفا عکس زیر رو ببینید

ایــــــن عکــــــس

----------


## Hybrid

سلام دوست عزیز ، 

واسه Type کانکشن استرینگ شما تنها مجاز به استفاده از محدوده Application هستین ، همانطور که میدونید در این نوع Scope شما نمیتونید مقادیر رو در زمان اجرا تغییر بدین.

آیا شما لازم دارین در زمان اجرا کانکشن استرینگ و تغییر بدین؟؟! مطمئنا نه.

----------


## barnamenevisforme

سلام
اگه بخوایم connectionstring رو  برای استفاده های بعدی از برنامه و یا در زمان شروع اولیه و یادر صورت   تغییر ادرس سرور تغییر بدیم پس باید چکار کنیم؟
یه راهش اینه که connectionstrig رو از قسمت setting به نوع string تغییر بدیم و scope رو به user.
ولی آیا راه بهتری هست؟(منظورم با استفاده از setting)

----------


## NasimBamdad

> واسه Type کانکشن استرینگ شما تنها مجاز به استفاده از محدوده Application هستین ، همانطور که میدونید در این نوع Scope شما نمیتونید مقادیر رو در زمان اجرا تغییر بدین.


پس روی چی بگذاریم ؟ STRING بگذاریم ؟  ؟ ؟ 




> آیا شما لازم دارین در زمان اجرا کانکشن استرینگ و تغییر بدین



شدید نیاز داریم ،

----------


## Hybrid

اگه نیاز دارین کانکشن استرینگ رو در زمان اجرا تغییر بدین نوع Scope اپلیکیشن به درد نمیخوره از نوع String بزار.

نوع دیگه ای سراغ ندارم.

----------


## sabagood

سلام ممنون از مطلب خوباتون
من می خوام در پروژه ی سی شارپم از این نمونه ای که گذاشتید استفاده کنم ولی متاسفانه نمی تونم!
My به چه معنی ای هست در vb?

----------


## xxnagin

سلام 



> من می خوام در پروژه ی سی شارپم از این نمونه ای که گذاشتید استفاده کنم ولی متاسفانه نمی تونم!
> My به چه معنی ای هست در vb?


شما پست 19 این تایپیک رو ببین نمونه #c رو گذاشتم

----------


## A_1397

من از یه کامپونننتی استفاده می کنم که خاصیت RightToLeft نداره و شدیدا اجتیاج دارم که راست چینش کنم. آیا میشه از Seetting واسه اینکار کمک گرفت؟ برای خاصیت RightToLeft، نوع Typeرو چی باید بزارم؟

----------


## ROSTAM2

اُ هُچ ، تنظیمات که به COMPONENT خصوصیت اضاف نمی کنه! 
خاصیت RighttoleftLayout هم نداره ؟

----------


## A_1397

> اُ هُچ ، تنظیمات که به COMPONENT خصوصیت اضاف نمی کنه! 
> خاصیت RighttoleftLayout هم نداره ؟


بله خصوصیت RighttoLeft نداره. ولی نگاه کردم به  Aplication Settingش دیدم توی PropertiBinding این خصوصیت هستش. بعد یه new زدم و یکی ساختم و برابر با true گذاشتم و ok کردم ولی اجرا که گرفتم باز هم راست چین نشده بود :ناراحت:  حالا شاید مسیر رو دارم اشتباه میرم!

----------


## ROSTAM2

خود اون COMPONENT باید اون خصوصیت رو داشته باشه تا Settings پروژه بتونه مقدار اونو ثبت کنه و یا دوباره بازخونی وقتی خود شئ اون خاصیت رو نداره که نمی شه خو

----------


## A_1397

> نوعی متغیر در چارچوب .net وجود داره که امکان ذخیره سازی داده ها رو حتی پس از اینکه برنامه رو میبندید رو در خودش داره ، یعنی راحت میتونین مقداری رو در این متغیر ها ذخیره کنین و در مراجعات بعدی به برنامتون ازشون استفاده کنین ، کاربردشون خوب معلومه مثلا میتونین برای نگهداری تنظیمات برنامه اگر تعدادشون کم باشه خیلی راحت استفاده کنین .
> 
> برای ساخت یک نمونه از این فیلد ها به ترتیب مراحل زیر رو برید : 
> 
> 1 ) در پنجره Solution Explorer رو My Project دابل کلیک کنین.
> 
> 2 ) در پنجره باز شده به تب Settings برید.
> 
> 
> ...


سلام ممنون بابت مطلب مفیدتون. من میخام توی یه شرط مقدار یکی از متغیرهام رو بررسی کنم، ببینم خالیه یا مقدار داره. ولی از کدزیر که استفاده میکنم اررور میده و قبول نمیکنه. متغیرم هم string هستش:
If My.Settings.mn_melk.IsNullOrEmpty Then
end if

----------


## xxnagin

سلام 
از این کد  ها استفاده کن        


         My.Settings.mn_melk = TextBox1.Text
        If String.IsNullOrEmpty(My.Settings.mn_melk) Then
            MsgBox("is Empty")
        End If
یا از این 
if My.Settings.mn_melk =string.empty Then
   MsgBox("is Empty")
End If
یا 
if My.Settings.mn_melk.length<0  Then
   MsgBox("is Empty")
End If

----------


## nima_8m

سلام
مرسی از مطالب جالبی که گذاشتین و تشکر ویژه از جناب ابراهیمی
آیا میشه اطلاعات یه فرم رو تو setting نگهداری کرد ؟
چرا؟
من یه فرم دارم که به مرور پر میشه و بعداز یه زمانی ذخیره ولی گاهی پیش میاد در حین کار برق میره اطلاعات اون فرم خیلی مهه تو دیتا بیس هم دخیره نشده وقتی سیستم روشن شد من میخوام این اطلاعات تو فرم باشه و کاربر به ورود اطلاعات ادامه بده و بعد ذخیره
از این روشی که گفتید میشه یا خیر؟درضمن من فراموش کردم فرم من یه گرید هستش
ممنون از توجهتون

----------


## barnamenevisforme

سلام
آره فکر کنم بشه.
از گزینه borrows استفاده کن و نوع متغیر رو dataset در نظر بگیر.فقط باید در نظر داشته باشی که هر لحظه تغییری در جدول داده شد،setting رو ذخیره کنی.واسه بعضی تغییرات مثل update کردن بعضی از سطرها،موقع load،باید وضعیت row state رو چک کنی.

----------


## Hybrid

> آیا میشه اطلاعات یه فرم رو تو setting نگهداری کرد ؟
> چرا؟


سلام به شما دوست عزیز  ، بله چرا نمیشه دوست قبلی جوابتون رو دادن ولی میتونین از فایل های INI هم استفاده کنید که بسیار جالب هستند ، و راحت میتونین اطلاعات رو داخلش ذخیره کنید و بخونید ، 

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

----------


## biotechsoft

If My.Settings.mn_melk.IsNullOrEmpty Then
end if
بجای کد بالا از این استفاده کن
خیلی ساده:

If My.Settings.mn_melk = "" Then

 end if

----------

