PDA

View Full Version : استفاده از Setting نرم افزار و تعریف متغیرهایی جهت تغییر رنگ و فونت کلیه اشیاء



ali_autumnal
یک شنبه 21 شهریور 1389, 10:47 صبح
سلام

من تو یه نرم افزاری میخوام امکان تغییر رنگ و فونت کلیه اشیاء رو به کاربر بدم.

آیا از Setting استفاده کنم . متغیر هایی از نوع رنگ و فونت تعریف کنم؟

چگونه این خاصیت ها رو در برنامه در یک لحظه تغییر بدیم.

آخه وقتی تعداد مثلا لیبل ها زیاد میشه و استفاده از دستوری مثل دستور زیر زیاد خوش آیند نیست:



foreach(Control ctrl in Controls)
if(ctrl.gettype().tostring()=="System. ... .Label")
ctrl.ForeColor=Settings.Defualt. ... .ColorLabel;

و یا تابعی مثل این:




private void SetControlColor(params Label[] _label)
{
foreach(Label lbl in _label)
lbl.ForeColor=Settings.Defualt. ... .ColorLabel;
}


لطفا روش های بهینه تر و کم هزینه ای رو معرفی کنید.

ali_autumnal
یک شنبه 21 شهریور 1389, 15:49 عصر
كسي از دوستان نظري نداره؟
نميدونم چرا به سوالات من كسي پاسخ نميده. اكثر سوالات من يا بدون پاسخ هست و يا حداكثر 3 پاسخ ... .

sinashahab
یک شنبه 21 شهریور 1389, 15:58 عصر
استفاده از Setting زیاد جالب نیست .

می تونید خودتون امتحان کنید.

یه بار یه چیزی رو در Setting ذخیره کنید و بعدش مکان .exe روو تغییر بدید و اون موقع شاهد ضعف setting می شوید .

ali_autumnal
یک شنبه 21 شهریور 1389, 16:03 عصر
آره اينو ميدونم . اما نرم افزار من فقط توشاخه اي كه نصب بشه اجرا ميشه!!!؟ نه جايي كه بعدا كپي شده.
متشكرم از يادآوري
--------------------
راستي اگه راه حل ديگه اي ميدونيد و كم هزينه است بگيد.

sinashahab
یک شنبه 21 شهریور 1389, 16:11 عصر
اگه اطلاعات مهم و راز داری هست می تونی اونو در یه فایل با پسوند .dll (برای گمراهی) به صورت کدگذاری شده در System32 بزاری. اسم اون فایل dll هم بر روی هر سیستمی فرق کنه .

مثلا اسم دو حرف اول اسم User و بعدش ......

اینطوری تقریبا غیر قابل پیدا کردن میشه :چشمک:.

ali_autumnal
یک شنبه 21 شهریور 1389, 16:15 عصر
اگه اطلاعات مهم و راز داری هست می تونی اونو در یه فایل با پسوند .dll (برای گمراهی) به صورت کدگذاری شده در System32 بزاری. اسم اون فایل dll هم بر روی هر سیستمی فرق کنه .

مثلا اسم دو حرف اول اسم User و بعدش ......

اینطوری تقریبا غیر قابل پیدا کردن میشه :چشمک:.

لطفا در مورد عنوان سوال پاسخ بديد. ويا راه حل هايي كه منجرب به استفاده از حلقه ها نشه. مثلا طي يك فرايند كوتاه كليه ليبل ها به يه رنگ خاصي تغيير رنگ بدهند.

ali_autumnal
یک شنبه 21 شهریور 1389, 20:17 عصر
منتظرم. تا جوابی پیدا نکنم دست بردار نیستم.

mahziar
یک شنبه 21 شهریور 1389, 23:26 عصر
سلام

من تو یه نرم افزاری میخوام امکان تغییر رنگ و فونت کلیه اشیاء رو به کاربر بدم.

آیا از Setting استفاده کنم . متغیر هایی از نوع رنگ و فونت تعریف کنم؟

چگونه این خاصیت ها رو در برنامه در یک لحظه تغییر بدیم.

آخه وقتی تعداد مثلا لیبل ها زیاد میشه و استفاده از دستوری مثل دستور زیر زیاد خوش آیند نیست:



foreach(Control ctrl in Controls)
if(ctrl.gettype().tostring()=="System. ... .Label")
ctrl.ForeColor=Settings.Defualt. ... .ColorLabel;

و یا تابعی مثل این:




private void SetControlColor(params Label[] _label)
{
foreach(Label lbl in _label)
lbl.ForeColor=Settings.Defualt. ... .ColorLabel;
}


لطفا روش های بهینه تر و کم هزینه ای رو معرفی کنید.

برای تغییر فونت همه ابجکت ها بصورت یکجا میتونی از روش زیر استفاده کنی که تو setting مشخصات رو ذخیره میکنه ، ولی نمیدونم برای تغییر رنگ هم میشه از همین روش استفاده کرد یا نه !

http://barnamenevis.org/forum/showpost.php?p=1096546&postcount=17

ali_autumnal
دوشنبه 22 شهریور 1389, 00:19 صبح
برای تغییر فونت همه ابجکت ها بصورت یکجا میتونی از روش زیر استفاده کنی که تو setting مشخصات رو ذخیره میکنه ، ولی نمیدونم برای تغییر رنگ هم میشه از همین روش استفاده کرد یا نه !

http://barnamenevis.org/forum/showpost.php?p=1096546&postcount=17

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

تو این پروژه هم تست کنم ببینم حلقه foreach داخل کلاس چقدر هزینه برداره. اطلاع میدم.

متشکرم از یاداوری

ali_autumnal
دوشنبه 22 شهریور 1389, 01:02 صبح
آره دقیقا درست عمل میکنه. هزینه ای هم نداره.

الان یادم افتاد چرا از این استفاده نمی کردم. این کلاس فونت و رنگ کلیه کنترل ها رو تغییر میده. اما من میخوام گروه گروه تغییر بدم. مثلا لیبل ها یه رنگ ، تکست باکس ها یه رنگ و الی اخر...

اگر حلقه foreach در کلاس که کد زیر هست:



foreach(Control obj in form.Controls)
try{
obj.ForeColor=Settings. ... .color;
}
catch{}


رو به این شکل تغییر بدیم مشکل من حل میشه. اما متاسفانه به خطا بر میخوره:



foreach(Label obj in form.Controls)
try{
obj.ForeColor=Settings. ... .color;
}
catch{}

خطای زیر رخ میدهد:

Error:
Unable to cast object of type 'Stimulsoft.Controls.Win.DotNetBar.TabControl' to type 'System.Windows.Forms.Label'.


و اگر این را هم حل کنیم که کد زیر می شود:



foreach (Control Obj in form.Controls)
{
try
{
if (Obj.GetType().ToString() == "System.Windows.Forms.Label")
Obj.ForeColor = color;
}
catch { }

}



اصلا اجرا نخواهد شد. یعنی دستور داخل if هرگز اجرا نخواهد شد.

لطفا راهنمایی کنید

cheshm6k
دوشنبه 22 شهریور 1389, 01:37 صبح
سلام .

دستور if رو به اینصورت تغییر بدید :


foreach (Control ctrl in this.Controls)
{
if (ctrl is Label)
ctrl.BackColor = Color.Pink;
}

موفق باشید.

ali_autumnal
دوشنبه 22 شهریور 1389, 10:16 صبح
سلام .

دستور if رو به اینصورت تغییر بدید :


foreach (Control ctrl in this.Controls)
{
if (ctrl is Label)
ctrl.BackColor = Color.Pink;
}موفق باشید.

دستت درد نکنه اینو تست نکرده بودم . تست كنم اطلاع ميدم.

ali_autumnal
چهارشنبه 24 شهریور 1389, 09:44 صبح
سلام .

دستور if رو به اینصورت تغییر بدید :


foreach (Control ctrl in this.Controls)
{
if (ctrl is Label)
ctrl.BackColor = Color.Pink;
}موفق باشید.

دوست عزيز اين كد هم جواب نميده. يعني نميزاره دستورات داخل IF اجرا بشه.

دوستان لطفا راهنمايي كنيد.

cheshm6k
چهارشنبه 24 شهریور 1389, 11:20 صبح
دوست عزيز اين كد هم جواب نميده. يعني نميزاره دستورات داخل IF اجرا بشه.

دوستان لطفا راهنمايي كنيد.

سلام .

دوست من ، این کد تست شده، جواب هم میده .

کدی که علاوه بر این نوشتی بذار ببینیم مشکل کجاست.

ali_autumnal
چهارشنبه 24 شهریور 1389, 11:31 صبح
سلام .

دوست من ، این کد تست شده، جواب هم میده .

کدی که علاوه بر این نوشتی بذار ببینیم مشکل کجاست.


ببينيد من از كامپوننت stimul... Ribbon استفاده ميكنم. مشكل اينجاست كه اون نميزاره اين كد اجرا بشه!
Stimulsoft.Controls.Win.DotNetBar.TabControl'


من هيچ كد اضافه اي ننوشتم . حتي اين كد هم صحيح است:



try
{
if (Obj.GetType().ToString() == "System.Windows.Forms.Label")
Obj.ForeColor = color;
}