PDA

View Full Version : حرفه ای: جلوگیری از تولید زیاد کدها برای false یا true کردن کنترل ها؟



complexcoding
پنج شنبه 24 شهریور 1390, 14:53 عصر
سلام
زمانی که 20 تا button روی فرم داشته باشیم بخواهیم هر 20 تا رو فونتشو عوض کنیم باید خیلی کد بنویسیم.
یا زمانی که 40 تا Picturebox داشته باشیم بخواهیم همش False یا True کنیم باید خیلی کدنویسی کنیم و اینجوری حجم برناممون زیاد می شه و نظم کدها به هم می ریزه .
حالا درخواست من از دوستان ارائه راهکارهای مختلف و خوب برای ساده تر شدن کدنویسی می باشد؟
ممنون و سپاسگذار

mehran_sh_t
پنج شنبه 24 شهریور 1390, 15:14 عصر
سلام می تونی از ویژگی Controls فرم استفاده کنی، مثلا برای textbox، بعد از انتخاب مقدار، در فرم می گرده و تمام کنترل هایی که تکست باکس هستند رو می تونی فونتش رو عوض کنی. فقط با این کد همه کنترل های مشابه عوض میشه. اگر 20 تا تکست باکس داشته باشی و بخوای فونت 15 تاشو عوض کنی، نمیشه!

morteza271
پنج شنبه 24 شهریور 1390, 15:18 عصر
یاین کار رو میتونید به صورت زیر انجام بدین البته باید همه کنترل هاتون داخل خود فرم باشن یا مثلا همه داخل یه پنل باشن و مثلا نصفی داخل یه پنل و نصفه دیگه داخل یه پنل دیگه نباشه(البته در این حالت هم میشه درستش کرد ولی مشکل تر میشه.)
اگر شرایطی که گفتم رو داشته باشه میتونید از کد زیر برای اینکه فونت تمام کلیدها رو تغییر بدین استفاده کنید :
Control.ControlCollection con = this.Controls;
foreach (Control c in con)
{
MessageBox.Show(c.GetType().ToString());
if (c.GetType() == typeof(Button))
c.Font = new Font("B Nazanin", 14, FontStyle.Bold);
}
موفق باشید

complexcoding
پنج شنبه 24 شهریور 1390, 15:30 عصر
خط 4 کد آقای تروسکی برای چیه؟
..
و درباره خط پنجمش یه توضیح می دین؟

f_pakzad
پنج شنبه 24 شهریور 1390, 15:34 عصر
به این صورت که در یک حلقه به همه کنترلهای مورد نظ مقدار میدهید. مثلاً در کد زیر همه تکست باکسهای موجود در فرم test نوشته میشود
foreach (Control txt in this.Controls)

{
 if (txt.GetType().Name == "TextBox")
txt.Text = @"test";
}

morteza271
پنج شنبه 24 شهریور 1390, 15:36 عصر
خط 4 کد آقای تروسکی برای چیه؟
..
و درباره خط پنجمش یه توضیح می دین؟

ببینید چون کد زیر
Control.ControlCollection con = this.Controls;

تمام کنترل های داخل فرم رو در مجموعه con ذخیره میکنه پس در داخل حلقه باید چک بشه که کنترلهایی رو فونتش رو عوض کن که از نوع Button یا کلید هستند.
خط پنجم هم که فونت رو عوض میکنه.
موفق باشید


تروسکیاینطوری درسته : طرسکی:لبخند:

mehdi.mousavi
پنج شنبه 24 شهریور 1390, 15:55 عصر
سلام.
در صورت استفاده از LINQ، کد جناب Troski رو می تونید بدین شکل نیز بنویسید:

Controls.OfType<Button>().ToList().ForEach(btn => { btn.Font = new Font("Tahoma", 12f); });

موفق باشید.

complexcoding
پنج شنبه 24 شهریور 1390, 15:56 عصر
خیلی عالی بود خیلی همه روش ها جالب و بدردم خورده .:خجالت:
اما این کدها برای عوض کردن خواص کنترل های بخصوصی درون فرم هست مثلا فقط برای تکس باکس اگر ما بخواییم همه کنترل های درون فرم رو خواصشونو عوض کنیم ولی کنترل پنل و کنترل های درون اون این خواص رو نگیرن باید چیکار کنیم؟؟؟؟

complexcoding
سه شنبه 05 مهر 1390, 13:03 عصر
دوستان این کد تمام خواص کنترل های فرم رو عوض می کنه اما من نمی خوام کنترل پنل و کنترل های درون اون خواصشون عوض بشه ؟
for (int i = 0; i < this.Controls.Count; i++)
{
this.Controls[i].MouseEnter += new System.EventHandler(this.button4_MouseEnter);
}

f_pakzad
چهارشنبه 06 مهر 1390, 23:58 عصر
خب تو یک شرط میتونید بنویسید گه اگر کنترل خاصی بود عملیات کورد نظر روش انجام بشه. مثلاً همه باتم ها یا تکست باکس ها.تو پست ۵ نوشتم

complexcoding
یک شنبه 10 مهر 1390, 00:35 صبح
دوستان سلام
همانطور که می دونید هر موضوعی در کدنویسی سی شارپ مربوط به بخشی در این زبان هست مثلا متدها و کلاس های کار با گرافیک مربوط به بخش گرافیک و کلاس ها و متدهای پایگاه داده مربوط به بخش پایگاه داده در سی شارپ هست .
حالا من متوجه نشدم و نمی دونم این کدها که در بالا نوشتید مربوط به کدوم فصل برنامه نویسی سی شارپ هست؟ مثلا Controls مساوی با Textbox و بقیه کدها یا مثلا label مساوی با Lname که در بقیه کد از نام Lname می تونیم به عنوان شی لیبل استفاده کنیم ؟؟؟؟
واقعا کار اینطوری با اشیاء خیلی جالبه و کمک بزرگی به من می کنید اگر یاد بدید و همراهی کنید منو:قلب:

complexcoding
یک شنبه 10 مهر 1390, 13:56 عصر
لطفا کمک کنید؟

complexcoding
دوشنبه 11 مهر 1390, 14:14 عصر
دوستان من همچنان منتظر جواب شما هستما ؟ چرا اینقدر طولش می دید ؟ شما که جوابو می دونید؟؟؟؟؟؟؟؟؟؟؟؟؟:اشتباه:

f_pakzad
دوشنبه 11 مهر 1390, 15:38 عصر
دوستان من همچنان منتظر جواب شما هستما ؟ چرا اینقدر طولش می دید ؟ شما که جوابو می دونید؟؟؟؟؟؟؟؟؟؟؟؟؟:اشتباه:

منظورتون دفیفاً چیه؟
control مربوط به فضای نامی System.Windows.Forms هست.
اما اگر منظورتون این هست که مثلاً در یک رفرنس کدوم بخش رو بخونید تا این مطالب توش باشه فکر نمیکنم جواب واحدی برای این سؤال وجود داشته باشه