PDA

View Full Version : ذخیره تغییرات پس از خروج از برنامه



maryam_vb
سه شنبه 15 آبان 1386, 15:15 عصر
با سلام
چگونه میتوان پس زمینه فرم که در هنگام اجرا تغییر کرده را هنگام خروج از برنامه ذخیره کرد؟

amirsajjadi
سه شنبه 15 آبان 1386, 15:44 عصر
با سلام
شما میتونید با استفاده از تابع SaveSetting و Getsetting این کار رو انجام بدید به اینصورت


Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
SaveSetting("Project Sample", "Size Form", "Height", CStr(Me.Size.Height))
SaveSetting("Project Sample", "Size Form", "Width", CStr(Me.Size.Width))
SaveSetting("Project Sample", "Size Form", "X", CStr(Me.Location.X))
SaveSetting("Project Sample", "Size Form", "Y", CStr(Me.Location.Y))
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim h, w, x, y As Integer
h = CInt(GetSetting("Project Sample", "Size Form", "Height", "500"))
w = CInt(GetSetting("Project Sample", "Size Form", "Width", "500"))
x = CInt(GetSetting("Project Sample", "Size Form", "X", "100"))
y = CInt(GetSetting("Project Sample", "Size Form", "Y", "200"))
Me.Size = New Size(w, h)
Me.Location = New Point(x, y)
EndSub

این تنظیمات در رجیستری ، در آدرس زیر ذخیره میشه:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings

maryam_vb
سه شنبه 15 آبان 1386, 16:02 عصر
ممنونم اما منظور من تصویر background فرم بود.

amirsajjadi
سه شنبه 15 آبان 1386, 21:09 عصر
شما میخواید آدرسشو ذخیره کنید یا خود عکس رو

maryam_vb
پنج شنبه 17 آبان 1386, 15:48 عصر
میخوام تصویر فرم که توسط کاربر تغییر کرده ذخیره شه یعنی اون تصویر انتخابی، background فرم بشه.

amirsajjadi
پنج شنبه 17 آبان 1386, 23:24 عصر
با سلام
خوب شما میتونید آدرس تصویر جدید رو با استفاده ازتوابع Savesetting و getsetting که توی پست قبلی مثالشو زدم ذخیره و بازیابی کنید
بازم اگه مشکلی بود بگو با برنامشو برات بزارم

maryam_vb
سه شنبه 04 دی 1386, 12:48 عصر
سلام
حالا من میخوام backcolor مربوط به label رو که تو همین فرم تغییر میکنه رو ذخیره و بازیابی کنم ولی متاسفانه از بعضی از آرگومانهاش سردرنیاوردم ، لطفا راهنماییم کنید.

savesetting(project name,"label1.backcolor","?","label1.backcolor")
و همچنین در آرگومانهای تابعgetsetting چه مقادیری باید قرار بدم؟

amirsajjadi
سه شنبه 04 دی 1386, 20:15 عصر
SaveSetting("a", "b", "c", "d")

توضیح :
a:نام کلیدی است که برنامه میسازد که معمولا نام آن را برابر نام پروژه قرار میدهند
b:نام زیر کلیدی است که در کلید a ساخته میشود
c:نام کلید رشته ای است که در کلید b ذخیره میشود
d:مقدار رشته ای است که در کلید c ذخیره میشود
مسیری که در رجیستری بعد از اجرای کد بالا ذخیره میشود به این ترتیب است :
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\a\b

maryam_vb
چهارشنبه 05 دی 1386, 13:41 عصر
من از کد بالا برای ذخیره heightوwidth استفاده کردم ولی خروجی تابع Getsetting رشته تهی است و برای همون از مقدار defult (آرگومان اختیاری چهارم)استفاده میکنه ، یعنی تغییرات کاربر اعمال نمیشه.درسته؟

ir_programmer
چهارشنبه 05 دی 1386, 16:15 عصر
چرا از Resources برنامه استفاده نمی کنی؟
در ضمن می تونی همه Config برنامه خودت تو یه شاخه تو رجیستری بنویس و موقع بالا اومدن همه رو لود کن. چه مشکلی برات پیش میاد؟

sinpin
چهارشنبه 05 دی 1386, 18:17 عصر
بدلیل ایجاد وابستگی (و نقض قانون XCopy در مورد انتقال برنامه ها) جدیدا معمولا از ذخیره اطلاعات در رجیستری چندان استقبال نمیشه. بهتره اطلاعات رو به شکل یک فایل xml ذخیره کنی یا یکی از راحتترین کارها استفاده از setting است.


بنقل از : http://www.30sharp.com/ShowArticle.aspx?nid=4&did=14&AuthorID=4 (http://www.30sharp.com/ShowArticle.aspx?nid=4&did=14&AuthorID=4)

مقدمه

ویژوال استودیو 2005 به کاربر این امکان را می دهد که مقادیری پایدار در مقاطع اجرایی برنامه ایجاد کند و به آنها دسترسی داشته باشد. این مقادیر اصطلاحا تنظیمات ( Settings) نامیده می شوند. تنظیمات برنامه می توانند اولویت های کاربر و یا مقادیر مهم برای اجرای برنامه را ارائه نمایند .
به عنوان مثال ممکن است شما بخواهید یک سری تنظیمات کاربر برای زمینه رنگهای برنامه و یا رشته ارتباطی برای برقرار کردن ارتباط برنامه با بانک اطلاعاتی مورد استفاده آن را در جایی ذخیره نمایید.
قسمت تنظیمات به شما این امکان را می دهد که هم بتوانید مقادیر ثابت مورد نیاز برنامه خود در خارج از محیط کدنویسی و هم مقادیر مورد نظر کاربران را ذخیره نمایید.
در حالی که در vb.net 2005 یک روش ساده با استفاده از فضای نامیMy برای دستیابی به تنظیمات وجود دارد در C# 2005 چنین روش مشابهی موجود نیست. با این حال کاربران #C هم می توانند با دستیابی به فضای نامی Properties از تنظیمات استفاده نمایند.
در این مقاله شما تفاوت بین تنظیمات کاربر و برنامه را خواهید شناخت و اینکه چگونه قادر خواهید بود تنظیمات جدیدی را در زمان طراحی ایجاد کنید و در زمان اجرای برنامه به آنها دست یابید و حتی چگونگی بهم پیوند دادن مجموعه های متعددی از تنظیمات به یکدیگر را در برنامه خود یاد بگیرید.
تنظیمات کاربر و برنامه (Application):

تنظیمات دارای چهار خاصیت هستند:
• Name: خاصیت نام ، شناسه ای برای دستیابی به مقدار تنظیمات در زمان اجرای برنامه است.
• Type: خاصیت Type در تنظیمات نشان دهنده یک "نوع" یا گونه در چارچوب .Net می باشد. به عنوان مثال تنظیماتی که زمینه رنگی مورد نظر کاربر را نگهداری می کند از نوع System.Color می باشد.
• Scope: این خاصیت نشان دهنده این است که تنظیمات در زمان اجرای برنامه تا چه اندازه قابل دستیابی هستند. یا اصطلاحا میدان عمل آنها چیست؟ دو مقدار ممکن برای این خاصیت عبارت است از: User و Application. در مورد این خاصیت در قسمتهای بعد بیشتر توضیح داده می شود.
• Value: این خاصیت مقداری است که در زمان اجرای برنامه در صورت دسترسی به تنظیمات برگردانده می شود. این مقدار از نوع خاصیت Type که در بالا توضیح آن داده شد می باشد.
در میان این خاصیتها Name, Type و Value برای بیشتر برنامه نویسان آشناست. اما خاصیت Scope نیاز به توضیحات بیشتری دارد. همانگونه که گفته شد این خاصیت می تواند دو مقدار User و Application را داشته باشد. تنظیمات با میدان عمل برنامه یا Application Scope تنظیماتی هستند که در زمان اجرای برنامه بدون در نظر گرفتن تنظیمات کاربر برای اجرای برنامه مورد استفاده قرار می گیرند، در حالی که تنظیمات با میدان عمل User (User Scope) معمولا اهمیت کمتری برای برنامه دارند و بیشتر به منظور نگهداری تنظیمات کم اهمیت و یا تنظیمات مورد نظر کاربر مورد استفاده قرار می گیرند.
وجه تمایز اصلی مابین میدان عمل Application و User در این است که تنظیمات با میدان عمل User در زمان اجرای برنامه قابل خواندن و نوشتن هستند و مقادیر آنها در کد برنامه می تواند تغییر کرده و ذخیره شود اما در میدان عمل Application تنظیمات فقط خواندنی (Read only) هستند.
این نوع تنظیمات فقط در زمان طراحی (Design) و یا به صورت دستی تغییر داده می شوند.
ایجاد تنظیمات جدید در زمان طراحی:
شما می توانید در زمان طراحی یک تنظیم جدید با استفاده از فرم طراح تنظیمات (Settings Designer) ایجاد نمایید. برای هر تنظیم شما باید چهار خاصیت گفته شده در بالا را معین نمایید .
برای ایجاد تنظیم جدید در زمان طراحی:
1- در پنجره Solution Explorer گره Properties را باز کنید.
2- در پنجره Solution Explorer روی فایل .settings که می خواهید تنظیم جدید در آن انجام دهید دوبار کلیک کنید.
3- در فرم طراح تنظیمات (Setting designer) مطابق شکل خواص Name, Type, Scope و Value را معین کنید.
http://www.30sharp.com/Contents/14/settingscs01.gif تغییر دادن مقدار (Value) تنظیمات در قسمتهای مختلف برنامه:


در برخی موارد ممکن است شما بخواهید مقدار تنظیمات خاصی را پس از کامپایل و استقرار کامل برنامه عوض کنید.مثلا ممکن است بخواهید رشته اتصال به بانک اطلاعاتی را برای وصل شدن به محل درست بانک اطلاعاتی تغییر دهید. از آنجایی که پس از کامپایل و استقرار برنامه، ابزارهای طراحی برنامه در دسترس نیستند، شما باید مقدار تنظیمات مورد نظر را به صورت دستی در فایل تغییر دهید.
برای تغییر دادن مقادیر تنظیمات در محلهای مختلف برنامه:
1- از برنامه Notepad ویا سایر برنامه های ویرایشگر متن یا ویرایشگر XML استفاده کرده و فایل AssemblyName>.exe.config> وابسته به برنامه خود را باز کنید.
2- تنظیمات مورد نظر خود را به صورت مثال زیر وارد نمایید:

<setting name="Setting" serializeAs="String">
<value>This is the setting value</value>
</setting>

3- مقادیر جدید را در قسمت Value وارد کرده و فایل را مجددا ذخیره کنید.
استفاده از تنظیمات در زمان اجرا:

تنظیمات در هنگام اجرای برنامه در دسترس شما هستند. شما می توانید به مقادیر آنها در میدان عمل برنامه (Application Scope) به صورت فقط خواندنی و در میدان عمل کاربر (User Scope) به صورت خواندنی/نوشتنی دسترسی داشته باشید.
تنظیمات در C# از طریق فضای نامی Properties در دسترس قرار می گیرند.
خواندن تنظیمات در زمان اجرا:
فضای نامی Properties تمامی تنظیمات پیش فرض پروژه را با استفاده از شیء Properties.Settingds.Default ارائه میکند. در هنگام کدنویسی تمامی تنظیمات به صورت خودکار (intelisense) و به صورت نوع واقعی ظاهر می شوند.
بنابراین اگر شما به عنوان مثال تنظیماتی از نوع System.Drawing.Color دارید، می توانید بدون هیچ مشکلی (از جهت casting) از آن استفاده کنید. مانند مثال زیر:

this.BackColor = Properties.Settings.Default.myColor;
ذخیره سازی تنظیمات کاربر در هنگام اجرای برنامه:

تنظیماتی با میدان عمل برنامه یا اصطلاحا Application-Scope به هیچ عنوان نمی توانند در هنگام اجرای برنامه تغییر داده شوند و ایجاد هر گونه تغییر در آنها تنها در زمان طراحی (Design-time) و با تغییر دادن فایل AssemblyName>.exe.config> امکان پذیر می باشد.
اما تغییر دادن تنظیمات با میدان عمل کاربر (user-Scope) در زمان اجرا ممکن است . شما می توانید مقدار مورد نظر خود را به این گونه تنظیمات تخصیص داده و با استفاده از متد Settings.Save آن را ذخیره نمایید. مثال زیر نمونه ای از این کار را نشان می دهد:

Properties.Settings.Default.myColor = Color.AliceBlue;
Properties.Settings.Default.Save();
در برخی موارد ممکن است بخواهید مجموعه های مجزایی از تنظیمات در برنامه خود داشته باشید که در این صورت به روش زیر می ¬توانید آنها را به برنامه خود اضافه نمایید:
1- به منوی Project رفته و گزینه Add New Item را انتخاب کنید.
2- در پنجره باز شده، گزینه Setting File را انتخاب کنید.
3- در قسمت Name یک نام برای فایل خود تعیین کنید (مانند SpecialSettings.settings) و دکمه Add را بزنید.
4- در قسمت Solution Explorer فایل جدید را به داخل فولدر Properties بکشید (یا اصطلاحا Drag کنید) این عمل موجب در دسترس قرار گرفتن فایل شما در هنگام کدنویسی می گردد.

amirsajjadi
پنج شنبه 06 دی 1386, 08:22 صبح
من از کد بالا برای ذخیره heightوwidth استفاده کردم ولی خروجی تابع Getsetting رشته تهی است و برای همون از مقدار defult (آرگومان اختیاری چهارم)استفاده میکنه ، یعنی تغییرات کاربر اعمال نمیشه.درسته؟
میشه کدتون رو بزارید