PDA

View Full Version : ذخیره تنظیمات کاربر



eyelash
جمعه 22 دی 1385, 23:52 عصر
ایام به کام
دوستان من می خوام وقتی که توی برنامه کاربر رنگ یا فونت را تغیر می ده تغیراتش را ذخیره کنم و دفعه بعد برنامه با همون تغیرات باز بشه. می خوام دوستان راهنمایی کنن چه جوری می شه این کار را انجام داد. به نظر خودم خوبه یک جدول تویDataBase برنامم تعریف کنم که اون تنظیمات را ذخیره کنه و هربار با اجرای برنامه اون ها زا به برنامم ست کنم. ولی فکر می کنم ویژوال بیسیک خودش باید راهی برای این کار داشته باشه. ممنون می شم دوستان نظر خودشون را بدن.

vahidiran
شنبه 23 دی 1385, 08:16 صبح
فکر نکنم ویژوال بیسیک از خودش بتونه این ار رو انجام بده ، یعنی اگه این کار رو انجام بده با ذات یک زبان برنامه نویسی متناقضه
یه راهش همونه که خودتون گفتید
ولی راه بالا یه خورده دردسر داره و الکی برنامه شلوغ می شه چون حداقل باید از سه کلاس ارتباط با داده استفاده کنی و دستوارتش رو هم اجرا کنی
می تونی با استفاده از نوشتن و خواندن در فایل این کار رو انجام بدی در یک فایل Bin که بلاک بندیش کرده ای

Asad.Safari
شنبه 23 دی 1385, 08:31 صبح
رجیستری رو واسه چی گذاشتن ؟؟؟


موفق باشید

leilav_1984
شنبه 23 دی 1385, 10:47 صبح
از امکانات System.XML استفاده کنید و تغییرات رو داخل یه XML ذخیره کنید
این روش سادس و بر خلاف استفاده از Database سرعت اجرا رو هم کم نمی کنه

Sub Zero
شنبه 23 دی 1385, 11:17 صبح
این همه دردسر واسه چی :
شما می تونید برای ذخیره تغییرات برنامتون از دستور SaveSetting و برای بازیابی این تغییرات از دستور Getsetting استفاده کنید . اصلا ماکروسافت این دوتا دستو رو واسه همین کار ساخته بسیار ساده ست به مثال زیر نگاه کنید .

برای ذخیره تغییرات :

SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Font", FontName)
SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Color", ColorName)
برای بازیابی تغییرات :

FontName=GetSetting(My.Application.Info.AssemblyNa me, "Appearance", "Font","")
ColorName=GetSetting(My.Application.Info.AssemblyN ame, "Appearance", "Color","")
به همین راحتی بهمین خوشمزگی
اگه پیشرفته تر از این خواستی پست شماره 7 تاپیک زیر ور نگاه کن
http://www.barnamenevis.org/forum/showthread.php?t=57859

programmermp
شنبه 23 دی 1385, 12:19 عصر
با تشکر جواب بسیار زیبای شما

اقای subzerro دستوراتی که گفتید تنظیمات رو کجا و در چه قالبی ذخیره می کنند

منظورم اینه که تو رجیستری ذخیره می کنه یا توی فایل اسمبلی
اگه تو فایل اسمبلی می نویسیه این فایل کجا هست

با تشکر

eyelash
شنبه 23 دی 1385, 14:37 عصر
برای ذخیره تغییرات :

SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Font", FontName)
SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Color", ColorName)
برای بازیابی تغییرات :

FontName=GetSetting(My.Application.Info.AssemblyNa me, "Appearance", "Font","")
ColorName=GetSetting(My.Application.Info.AssemblyN ame, "Appearance", "Color","")


ممنون. می شه بگین My چیه

programmermp
شنبه 23 دی 1385, 15:11 عصر
سلام

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

The My feature makes programming faster and easier by giving you intuitive access to commonly used methods, properties, and events. This table lists the objects contained in My, and the actions that can be performed with each.

Action Object Accessing application information and services.
My.Application Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/a0ecfccf-acf7-49ec-a08b-72e6458c5c8d.htm)
Accessing the host computer and its resources, services, and data.
My.Computer Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/cc814d79-6f7f-4e54-8b9d-5ecfdd77a0b8.htm)
Accessing the forms in the current project.
My.Forms Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/f6bff4e6-6769-4294-956b-037aa6106d2a.htm)
Accessing the application log.
My.Log Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/309b14b4-8875-4b2f-9661-a734b8cbff07.htm)
Accessing the current web request.
My.Request Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/93d5f0e2-6b60-4a2c-8652-d90216f6ad10.htm)
Accessing resource elements.
My.Resources Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/34c3f2dc-7b87-432c-9d5f-17ea666bb266.htm)
Accessing the current web response.
My.Response Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/626359bc-3165-40b4-bfaf-2c610e26eb5b.htm)
Accessing user and application level settings.
My.Settings Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/41f30dc1-202a-4273-b9b7-5728941f996c.htm)
Accessing the current user's security context.
My.User Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/caa7462e-2149-4bdb-8850-802b80b93cbf.htm)
Accessing XML Web services referenced by the current project.
My.WebServices Object (http://www.barnamenevis.org/forum/ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vbalr/html/f188dc05-2c75-41b6-bb68-122d1c3110a2.htm)

Sub Zero
شنبه 23 دی 1385, 21:52 عصر
اقای subzerro دستوراتی که گفتید تنظیمات رو کجا و در چه قالبی ذخیره می کنند

دستو SaveSetting تغییرات رو توی رجیستری ذخیره می کنه مسیر دقیقش هم اینه

HKEY_CURRENT_USER\Software\VB and VBA Program Settings

قبلا در یکی از تاپیکها گفته بودم از این دستور فقط برای ثبت نیازمندیهای یک برنامه استفاده می شه و خودش مسیر پیش فرض داره مثلا اگه شما بخواهید برنامتون رو طوری تنظیم کنید که با لود شدن ویندوز شروع به کار کنه نمی تونید از این دستور استفاده کنید .


می شه بگین My چیه
جناب eyelash
نمیدونم با vb 2003 کار میکنید یا با vb2005 به هر حال my امکان جدیدیست که در vb2005 قرار داده شده ودوستمون هم توضیحات خوبی راجع بهش دادن .
اصلا بهتره پارامترهای دستور رو برات توضیح بدم تا یه وقت فکر نکنی حتما باید از My استفاده کنی .

SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Font", FontName)

پارامتر اول :

معمولا از نام پروژه برای پارامتر اول استفاده می شه در واقع My.Application.Info.AssemblyName نام پروژه رو برمی گردونه تو هر چی دلت خواست بزار فقط رشته ای باشه .

پارامتر دوم و سوم وچهارم :

فرض کن میخوای آخرین موقعیت فرم برنامت در رجیستری ذخیره بشه پس در این سه قسمت مشخص میکنی کدوم خاصیتها باید ذخیره بشن مثلا .

SaveSetting("نام برنامت", "Location", "Top", مقدار)
فکر کنم ازاین واضح تر نمیشد توضیح بدم به هر حال اگه بازم سوالی داشتی در خدمتیم .

ali_kolahdoozan
شنبه 23 دی 1385, 22:10 عصر
من xml‌ رو پیشنهاد میکنم . ولی بازم خودتون میدونید

Sub Zero
شنبه 23 دی 1385, 22:36 عصر
من xml‌ رو پیشنهاد میکنم . ولی بازم خودتون میدونید
لطفا پیشنهادتون رو با توضیح و مثال ارائه بدید تا مقایسه کنیم و ببینیم کدوم یکی بهتره .:متفکر:

eyelash
یک شنبه 24 دی 1385, 01:16 صبح
برای بازیابی تغییرات :
کد:
FontName=GetSetting(My.Application.Info.AssemblyNa me, "Appearance", "Font","")
ColorName=GetSetting(My.Application.Info.AssemblyN ame, "Appearance", "Color","")
این دستورات نام رنگ یا فونت را برمی گردونه که از نوع رشته ای هم هست. حالا چه جوری باید اون را به تایپ مورد نظر تبدیل کرد؟
در ضمن من 2003 کار می کنم و و مبتدی هم هستم .
.:گیج:
باز هم از راهنماییتون ممنون

programmermp
یک شنبه 24 دی 1385, 09:00 صبح
یعنی چی به تایپ مورد نظر تبدیل کنم

خوب مثلا برای forecolor یا backcolor یک object اینطوری بنویس

(TextBox1.BackColor = Color.FromName(font

که font همان نام رنگی است که از تنظیمات ذخیره شده قبلی بر می گردونه

leilav_1984
یک شنبه 24 دی 1385, 09:55 صبح
این همه دردسر واسه چی :
شما می تونید برای ذخیره تغییرات برنامتون از دستور SaveSetting و برای بازیابی این تغییرات از دستور Getsetting استفاده کنید . اصلا ماکروسافت این دوتا دستو رو واسه همین کار ساخته بسیار ساده ست به مثال زیر نگاه کنید .

برای ذخیره تغییرات :

SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Font", FontName)
SaveSetting(My.Application.Info.AssemblyName, "Appearance", "Color", ColorName)
برای بازیابی تغییرات :

FontName=GetSetting(My.Application.Info.AssemblyNa me, "Appearance", "Font","")
ColorName=GetSetting(My.Application.Info.AssemblyN ame, "Appearance", "Color","")
به همین راحتی بهمین خوشمزگی
اگه پیشرفته تر از این خواستی پست شماره 7 تاپیک زیر ور نگاه کن
http://www.barnamenevis.org/forum/showthread.php?t=57859

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

leilav_1984
یک شنبه 24 دی 1385, 10:05 صبح
لطفا پیشنهادتون رو با توضیح و مثال ارائه بدید تا مقایسه کنیم و ببینیم کدوم یکی بهتره .:متفکر:

من خودم هم تا حالا از XML استفاده کردم و تو همین topic هم پیشنهاد دادم
شاید چون استاندارده و سادس و قابل تعمیم به برنامه های تحت وب هستش و ...
البته همه اینا هم دلیل نمیشه که حتما روش بهتری باشه

Sub Zero
یک شنبه 24 دی 1385, 18:09 عصر
این دستورات نام رنگ یا فونت را برمی گردونه که از نوع رشته ای هم هست. حالا چه جوری باید اون را به تایپ مورد نظر تبدیل کرد؟

اینم دستورات کاملش :

زمان ذخیره :
SaveSetting("هر چی می خوای بنویس", "Font", "Fontname", textbox1.font.name)
SaveSetting("هر چی می خوای بنویس", "Font", "Fontsize", textbox1.font.size)
----------------------------------------------------------------------
زمان بازیابی :
Dim Fontname as string=Getsetting("هر چی که قبلا نوشتی","Font","Fontname","")
Dim Fontsize as byte=Getsetting("هر چی که قبلا نوشتی","Font","FontSize","")
Textbox1.Font=New System.Drawing.Font(Fontname, Fontsize)

Sub Zero
یک شنبه 24 دی 1385, 18:14 عصر
این روش اگه برنامه دارای چند کاربر باشه و هر کدوم بخوان تنظیمات خودشون رو داشته باشن هم جوابگو هست؟

میتونید در پارامتر اول به جای ذخیره نام برنامه نام کاربر نوشته بشه و یا مخلوطی از هر دو و برنامتون رو طوری تنظیم کنید که هر کاربر تنظیمات خاص خودش رو از رجیستری بخونه .


من خودم هم تا حالا از XML استفاده کردم و تو همین topic هم پیشنهاد دادم
شاید چون استاندارده و سادس و قابل تعمیم به برنامه های تحت وب هستش

من تا به حال با Xml کار نکردم اگه ممکنه روش کد نویسیش رو برام توضیح بدین

ali_kolahdoozan
یک شنبه 24 دی 1385, 19:03 عصر
ببین این بدردت میخوره http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/settingscs_rl.asp

eyelash
سه شنبه 26 دی 1385, 00:22 صبح
Sub_Zero عزیز واقعا از جواباتون ممنونم.
من طبق دستورات شما عمل کردم و مشکلم با فونت حل شد ولی با رنگ مشکل دارم و با اینکه رنگ بازیابی می شه ولی به کنترل های مورد نظر اعمال نمی شه.

Dim BackColor As String = GetSetting("PName", "Color", "BackColor", "")
If ((BackColor) = "Control") Then
MainModule.ColorSetting = System.Drawing.Color.FromKnownColor(KnownColor.Con trol)
Else
MainModule.ColorSetting.FromName(BackColor)
End If
MsgBox(BackColor)

Sub Zero
سه شنبه 26 دی 1385, 01:28 صبح
کدت رو به صورت زیر تغییر بده ببین جواب می ده :

Dim BackColor As color = color.FromName(GetSetting("PName", "Color", "BackColor", ""))
If (BackColor.Name = "Control") Then
MainModule.ColorSetting = System.Drawing.Color.FromKnownColor(KnownColor.Con trol)
Else
MainModule.ColorSetting.FromName(BackColor.Name)
End If
MsgBox(BackColor)
خودم امتحانش کردم جواب داد . اگه جواب نگرفتی سورست رو بده یه نگاهی بهش بندازم .

Sub Zero
سه شنبه 26 دی 1385, 01:29 صبح
کدت رو به صورت زیر تغییر بده ببین جواب می ده :

Dim BackColor As color = color.FromName(GetSetting("PName", "Color", "BackColor", ""))
If (BackColor.Name = "Control") Then
MainModule.ColorSetting = System.Drawing.Color.FromKnownColor(KnownColor.Con trol)
Else
MainModule.ColorSetting.FromName(BackColor)
End If
MsgBox(BackColor)
خودم امتحانش کردم جواب داد . اگه جواب نگرفتی سورست رو بده یه نگاهی بهش بندازم .

eyelash
سه شنبه 26 دی 1385, 02:39 صبح
من فکر می کنم مشکل توی تابع SaveSetting()من باشه.چون موقع اعمال رنگ به BackGround .فرم هام این خطا را می گیرم

This control does not support transparent background colors.

کد ذخیره :

:
SaveSetting("PName", "color", "ColorName", MainModule.ColorSetting.Name

Sub Zero
سه شنبه 26 دی 1385, 15:14 عصر
This control does not support transparent background colors
نکتش همین جاست . تمامی کنترلها از رنگ Transparent پشتیبانی نمیکنند . شما می خوای به زور به همشون این رنگ رو نسبت بدی . از یه رنگی استفاده کن که همه کنترلها اونو ساپورت کنن و یا حداقل کنترلهاتو دسته بندی کن :
1- اونایی که Transparent رو می گیرن مثل Label یا GroupBox
2- اونایی که Transparent رو نمی گیرن مثل Form یا TextBox
بعد جداگونه بهشون مقدار بده

پس مشکل از SaveSetting نیست .

akbar_online
یک شنبه 29 شهریور 1388, 11:18 صبح
وقتی برنامه را در یک جای دیگه کپی میشه تنظیمات بر میگرده به اولش چیکار باید کنیم

akbar_online
یک شنبه 29 شهریور 1388, 16:19 عصر
کسی نمی دونه چیکار باید کرد

gigidagostino
یک شنبه 13 دی 1388, 16:00 عصر
سلام
با تشکر از راهنمایی هاتون
سوال
آیا میشه کاری کرد که مثلا فقط فونت به تمام فرمها اعمال بشه؟