PDA

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



HAIdle
پنج شنبه 10 خرداد 1386, 15:56 عصر
معمولا در برنامه ها یک سری تنظیمات وجود داره که کاربر انحام می ده و می خواد دفعات بعدی برنامه با آن تنظیمات بالا بیاد.
به نظر شما این تنظیمات باید در دیتابیس ذخیره بشه یا در یک فایل متن کنار برنامه و چرا؟
توضیح : در صورت ذخیره در دیتابیس فقط یک رکورد داریم.

omid_Ahmadi
پنج شنبه 10 خرداد 1386, 16:18 عصر
توی Solution Explorer در قسمت Properties روی Settings.settings کلیک کن. توی قسمتی که باز می شه، می تونی فیلدهای مربوط به تنظیمات برنامه خودت رو وارد کنی.

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



MyVar = MyAppName.Properties.Settings.Default.MySettingsNa me;


برای تغییر هم می تونی از همین کد استفاده کنی، به انضمام این مورد که باید در انتها برای ذخیره تغییرات از متد زیر استفاده کنی:



MyAppName.Properties.Settings.Default.Save();

HAIdle
پنج شنبه 10 خرداد 1386, 20:50 عصر
یه سوال دیگه:
مقاد یر این فیلدها کجا ذخیره می شند؟
چون حتی بعد remove کردن برنامه و نصب مجدد آن مقادیرش را حفظ کرده

kiani.mehdi
پنج شنبه 10 خرداد 1386, 22:13 عصر
حدس من اینه که در رجیستری با یه فرمت خاصی ذخیره میشه
یا اینکه در یه فایلی با فرمت خاصی ذخیره میشه و دفعه بعدی که برنامه لود میشه از اون فایل میخونه
البته مطمئن نیستم ولی سوال جالبی پرسیدین
دوستان هم اگه کسی نظری داره بگه
البته دوستان محبت کنن و سوال را با دقت بخونن که اشتباه لوپی پیش نیاد
موفق باشید
مهدی کیانی

essa_61
جمعه 11 خرداد 1386, 11:08 صبح
سلام
می خواستم بدونم یکی از تنظیمات scope هستش چه فرقی بین User و Application هست
ضمنا وقتی من دستورات زیر رو می نویسم error میده و میگه اینها read only هستن چطوری می تونم تغییرشون بدم



Properties.Settings.Default.font_form = fontDialog1.Font;
Properties.Settings.Default.Save();

kiani.mehdi
جمعه 11 خرداد 1386, 11:42 صبح
سوال شما با مشکل شما ربط داره
فرق user با application اینه که setting های user را میتونی با کد و run time تغییر بدی ولی setting ها ی application را نمیتونی
این خطایی هم که به شما میده به همین دلیل هستش
شما می خواین بک setting که application هست دا تغییر بدین و این اجازه را ندارین
در ضمن بهتره برای setting هایی که خدتان می خواین بذارین یه فایل جدید setting به برنامتون اضافه کنین
چون فایل setting پیش فرضی که برنامه خودش داره را برای تنظیمات برنامه در نظر میگیره
موفق باشید
مهدی کیانی

essa_61
جمعه 11 خرداد 1386, 12:16 عصر
باز هم مشکل من حل نشد من یک seting ساختم و از نوع user هم انتخاب کردم ولی باز هم error میده که read only هستش اینم کدم



apl_SystemInformation.Settings1.Default.form_font. Size = fontDialog1.Font.Size;

kiani.mehdi
جمعه 11 خرداد 1386, 15:03 عصر
این مشکل readOnly مربوط به setting نیست مربوط به خاصیت size از فونت هستش
شما نمیتونید سایز فونت را به این شکل تغییر بدین
باید از کلاس Font یه فونت تعریف کنید و بعد اونو تغییر بدین
مثل زیر




System.Drawing.Font newFont = new Font("Tahoma", 18);
this.Font = newFont;



حالا میتونین بجای مقدار 18 اونو از setting بخونین و برای fontFamily ها هم همونطور

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




System.Drawing.Font newFont = new Font(this.Font.FontFamily, 18);
this.Font = newFont;



حالا فرض کن که یک setting داری به اسم mySetting و توش یه متغییر به نام fontSize تعریف کردی که سطح دسترسی اون هم user هستش همچنین برای fontFamily هم همین کار را کرده باشین
حالا با کد زیر میتونی اونو از setting بخونی و باهاش کار کنی




System.Drawing.Font newFont = new Font(mySetting.Default.fontFamily,mySetting.Defaul t.fontSize);
this.Font = newFont;




برای ذخیره هم از کد زیر استفاده کنید





mySetting.Default.fontSize = 18;
mySetting.Default.fontFamily = "Tahoma";
mySetting.Default.Save();



دقت کنید که کلاسfont به تعداد 13 بار override شده که این یکی از ساده ترین حالاتش بود که من گفتم
اکه هر چیزی را از راهش برید هرگز به مشکل بر نمی خورید

موفق باشید
مهدی کیانی

essa_61
جمعه 11 خرداد 1386, 15:43 عصر
استاد این مشکل حل شد ممنون ولی حالا تغییراتی که توی seting میدهم ذخیره نمی شود کدم به صورت زیر شد مشکل از چی هستش ؟؟



if (fontDialog1.ShowDialog() == DialogResult.OK)
{
System.Drawing.Font newFont = new Font(fontDialog1.Font.Name, fontDialog1.Font.Size);
apl_SystemInformation.Settings1.Default.form_font = newFont;
apl_SystemInformation.Settings1.Default.Save();
}

essa_61
جمعه 11 خرداد 1386, 16:57 عصر
میشه یکی منو کمک کنه



MessageBox.Show(Properties.Settings.Default.fontfo rm.ToString());
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
System.Drawing.Font newFont = new Font(fontDialog1.Font.Name, fontDialog1.Font.Size);
apl_SystemInformation.Settings1.Default.form_font = newFont;
Properties.Settings.Default.fontform = newFont;
Properties.Settings.Default.Save();
apl_SystemInformation.Settings1.Default.Save();
this.Font = Properties.Settings.Default.fontform;
MessageBox.Show(Properties.Settings.Default.fontfo rm.ToString());
}

توی مسج باکس تغییرات اغمال شده ولی روی فرم تغییری ایجاد نمی شود ضمنا تغییرات ذخیره نمی شوند و بار بعد دوباره همه چیز به حالت اول می شود

essa_61
جمعه 11 خرداد 1386, 18:53 عصر
کسی به داد من نمی رسه ؟؟؟؟؟؟؟؟؟؟؟؟

kiani.mehdi
جمعه 11 خرداد 1386, 20:01 عصر
من جواب را براتون کامل نوشته بودم ولی نمی دونم چرا مدیر بخش پاکش کرده؟
کلی توضیح داده بدم
پدرم در اومد اون همه را نوشتم بعد حالا خیلی راحت میای میبینی نیست
در کل و خلاصه بگم مشکل کدت اینه که آقا essa خاصیت سایز مربوط به فونت را نمی تونی اینطوری عوض کنی
بایستی اونو به شکل زیر عوض کنی

ابتدا 2 تا متغیر تو فایل setting بساز به نام های fontSize از نوع int با مقدار دلخواهت و fontFamily از نوع string با مقدار دلخواه البته درست مثلا Tahoma
سطح دسترسی هر کدام را هم user بذار

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



Font newFont = newFont(mySetting.Default.fontFamily,mySetting.Def ault.fontSize);
this.Font = newFont;




برای ذخیره کردن setting ها هم از کد زیر استفاده کن




mySetting.Default.fontSize = 16;
mySetting.Default.fontFamily = "Tahoma";
mySetting.Default.Save();



مقادیر 16 و Tahoma اختیاری هستند

برای کلاس فونت نیاز به namespace زیر داری



Systtem.drawing


کلاس فونت 13 تا override داره که اینی که من نوشتم ساده ترینش بود
راستی یادم رفت بگم mySetting اسم فایل setting جدید که باید به برنامت اضافه کنی
در ضمن توصیه میشه که برای تنظیمات حتما فایل setting جدید به برنامه اضافه کنید و از setting پیش فرض آن استفاده نکنید

امید وارم این بار جواب را ببینی
موفق باشید
مهدی کیانی

kiani.mehdi
جمعه 11 خرداد 1386, 20:19 عصر
جوابتون را گرفتین؟

mahani
جمعه 11 خرداد 1386, 21:50 عصر
حدس من اینه که در رجیستری با یه فرمت خاصی ذخیره میشه
در app.confing و با فرمت xml ذخیره میشه

essa_61
شنبه 12 خرداد 1386, 12:44 عصر
دوست عزیز توضیحات شما پاک نشده فقط توی صفحه اول هستش من راهنماییتون رو انجام دادم و جواب گرفتم ولی حالا مشکلم اینه که تغییرات ذخیره نمیشن کد زیر رو نگاه کنید




MessageBox.Show(Properties.Settings.Default.fontfo rm.ToString());
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
System.Drawing.Font newFont = newFont(fontDialog1.Font.Name, fontDialog1.Font.Size);
Properties.Settings.Default.fontform = newFont;
Properties.Settings.Default.Save();
this.Font = Properties.Settings.Default.fontform;
MessageBox.Show(Properties.Settings.Default.fontfo rm.ToString());
}




توی مسج باکس اول مقدار ابتدایی که در هنگام تعریف متغیر دادم نمایش داده می شود و در مسج باکس دوم هم تغییرات اعمال می شوند ولی 2 تا مشکل هستش
1. فونت فرم تغییر نمیکنه و همونطور مثل قبل باقی می مونه
2. وقتی برنامه بسته میشه دوباره مقادیر به حالت اول بر میگردن و save نمیشن

چرا؟؟

kiani.mehdi
شنبه 12 خرداد 1386, 16:23 عصر
چک میکنم خبرش را میدم
راستش تا دیروز که من چک میکردم نوشته هام نبودن
ولی امروز درست شده
شاید مشک از مرورگر من بوده
به هر حال به کدتون یه نگاهی میکنم خبرش را می دم

kiani.mehdi
شنبه 12 خرداد 1386, 16:41 عصر
کدت درست
البته بهتره که بجای


fontDialog1.Font.Name


در خط چهارم کدت کد زیر را بذاری


fontDialog1.Font.FontFamily


البته همون هم درسته

برنا مت مشکلی نداره و کار میکنه
ذخیره هم میشه

نمونه برنامه را هم برات میذارم

موفق باشید
مهدی کیانی

essa_61
شنبه 12 خرداد 1386, 17:59 عصر
عجیب کد من هم دقیقا مثل مال شماست چرا کار نمی کنه پس ؟؟؟
ولی مال شما کار کرد
ممنون

Chabok
شنبه 12 خرداد 1386, 18:24 عصر
با سلام
در درایو ویندوز و در پوشه Document and settings ذخیره میشه (در قالب یک فایل xml)
در این شاخه + زیر شاخه هاش فایلهای xml را سرچ کنید

kiani.mehdi
شنبه 12 خرداد 1386, 21:27 عصر
عجیب کد من هم دقیقا مثل مال شماست چرا کار نمی کنه پس ؟؟؟
ولی مال شما کار کرد
ممنون

مگه میشه ؟
نمونه برنا متون را بذارید شاید جاییش یه مشکلی داره

essa_61
یک شنبه 13 خرداد 1386, 11:29 صبح
وایییییییییییی خجالت !!!
من روی فرمم فقط یه منو داشتم و اصلا تغییرات رو متوجه نمیشدم فکر می کردم فونت منو با فونت فرم تغییر می کنه

خیلی ممنون خیلی چیز عالی یاد گرفتم

kiani.mehdi
دوشنبه 14 خرداد 1386, 17:10 عصر
خواهش میکنم آقا عیسی
دکمه تشکر را برای همین گذاشتن
میتونید از اون استفاده کنید :خجالت: :بامزه:

Future
سه شنبه 15 خرداد 1386, 05:22 صبح
سلام دوستان، به نظر شما اگه این تنظیمات را در یک کلاس قرار بهیم چطوره؟
اگر در فایل بخوام قرار بدم چه نوع فایلی باید باشد.
با تشکر

اَرژنگ
سه شنبه 15 خرداد 1386, 05:52 صبح
سلام دوستان، به نظر شما اگه این تنظیمات را در یک کلاس قرار بهیم چطوره؟
اگر در فایل بخوام قرار بدم چه نوع فایلی باید باشد.

با تشکر
How to: Add Application Configuration Files to C# Projects
http://msdn2.microsoft.com/en-us/library/ms184658(vs.80).aspx

omid_Ahmadi
سه شنبه 15 خرداد 1386, 07:02 صبح
فایل زیر، یه نمونه برنامه برای این کار از Sample های MSDN هست.
می تونه کمکتون کنه.

Future
چهارشنبه 16 خرداد 1386, 03:55 صبح
سلام دوستان، ببخشید شاید سوالم خیلی خیلی مبتدی باشه خوب آخه من تازه به سی شارپ اومدم .میشه بگید این تنظیمات به چه دردی می خوره و اصلا منظور از این تنظیمات چه تنظیماتی است؟
با تشکر

اَرژنگ
چهارشنبه 16 خرداد 1386, 05:10 صبح
سلام دوستان، ببخشید شاید سوالم خیلی خیلی مبتدی باشه خوب آخه من تازه به سی شارپ اومدم .میشه بگید این تنظیمات به چه دردی می خوره و اصلا منظور از این تنظیمات چه تنظیماتی است؟
با تشکر
مثلاْ کاربر میخواهد با فونت بخصوصی کار کنه و یا اینکه وقتی که برنامه را اجرا میکنه با فرمه بخصوصی شروع بشه.
اگر با فایر فاکس و یا اینترنت اکسپلرور کار کنید میتوانید به جایه اینکه این سایت را با فونت تاهما ببینید، یک فونت دلبخواه دیگر خودتان را انتخواب کنید (بعد از این تنظیم هر بار برنامه اجرا میشه از همان فونتی که شما تنظیم کردید استفاده میکنه)