PDA

View Full Version : سوال: Enable/Disable کردن کنترل های یک فرم



shahab_ss
دوشنبه 30 شهریور 1388, 14:09 عصر
فرض کنید که تعداد زیادی کنترل روی یک فرم داریم و قصد داریم از این فرم در چندین حالت مختلف استفاده کنیم .
در هر کدوم از این حالت ها تعداد خاصی از کنترل ها فعال و یا غیر فعال هستند.
چه روشی پیشنهاد میکنید که نیاز نباشه در هر حالت بطور مشخص اسم تک تک کنترل ها برده بشه ؟

Beyondsoft
دوشنبه 30 شهریور 1388, 16:35 عصر
گروه هایی که مثل هم هستند را در یک پنل قرار بده و آن پنل را disble/enable کن.

شاید در نگاه اول به نظر برسد که به دلیل پخش بودن این کنترل ها در سراسر سایت این امکان نباشد اما شما باید چندید پنل به اندازه کل فرم ساخته سپس از ابزار docoument outline از منوی view و زیر شاخه other windows استفاده کنید !

shahab_ss
دوشنبه 30 شهریور 1388, 16:40 عصر
ممنون از توجهت ، راستش الان همین کار رو انجام دادم.اما هنوز هم کد بسیار شلوغی دارم. چون داستان فقط مربوط بهEnabled نیست.بعضی از کنترل ها نیاز به تغییر در Text هم دارن!

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

Beyondsoft
دوشنبه 30 شهریور 1388, 17:20 عصر
با عرض پوزش، بنده متوجه عمق فاجعه نیستم !

در صورت علاقه بیشتر توضیح بدید !

shahab_ss
دوشنبه 30 شهریور 1388, 17:58 عصر
بعضی از فرم ها قراره چند منظوره استفاده بشن ، مثلا برای سه Entity که صفات مشابه دارن.حالا هر کدوم از اینا درج - جدید و ویرایش دارن که بسته به وضعیت جاری باید یک سری از کنترل ها دیده بشه ( یک سری دیده نشه ! )،بعضی ها فعال و بعضی غیر فعال باشه.
Text در بعضی ها تغییر کنه ( مثلا در groupBox ها )و چیز هایی از این قبیل.
میدونم که اگر فرمها رو جدا کنم اوضاع بهتر میشه !!! امـــــا متاسفانه در این مورد نباید این کار انجام بشه.

seniamail
دوشنبه 30 شهریور 1388, 18:11 عصر
شما میتوانید از foreach استفاده کنید

مثال:

foreach (Control ctrl in panel2.Controls)
{
if (ctrl is TextBox)
{
ctrl.Text = "";
}
}

Beyondsoft
دوشنبه 30 شهریور 1388, 18:15 عصر
راه خاصی فکر نکنم باشه !

هر گروه رو تو یکی پنل بزار! برای هر قسمت یک فانگشن بنویس که چندین ورودی بگیرند و اون فانگشن ها، تغییرات را انجام دهند، اینطوری نه کدت خیلی شلوغ می شه، نه خیلی به زحمت افتادی

shahab_ss
دوشنبه 30 شهریور 1388, 18:22 عصر
تازه رسیدیم سر خونه اول !!!
مشکل اینجاست که بعضی از این کنترل ها ToolstripMenu هستن و نمیشه اونارو رو Panel قرار داد .

برام جالب بود که بدونم تو پروژه های بزرگ این جور مسائل چطور Handle میشه.

به هر حال از هم فکری شما ممنونم

Reza_Yarahmadi
دوشنبه 30 شهریور 1388, 18:28 عصر
یکی از دوستان از یه راهی استفاده میکنه که ممکنه به دردتون بخوره. توی روشش اول به تعداد مورد نیاز فرمهای هم اندازه درست میکنه ، برای هر فرم ابزارهای مورد نیازش رو اضافه میکنه و برای رویدادهای مورد نظرش هم کدهاش رو مینویسه. بعد توی فرم اصلی برای هر درخواست به جای نمایش فرم ساخته شده ، ابزارهای فرم اصلی رو حذف میکنه و ابزارهای فرم مورد نیاز رو به فرم اصلی اضافه میکنه.
خوبیه این روش اینه که برای هر کار یک فرم هست و کدهای هر فرم جدا از فرم دیگه است!!! به این ترتیب از شلوغ شدن کدهای فرم اصلی جلوگیری میشه.

shahab_ss
دوشنبه 30 شهریور 1388, 18:35 عصر
ابزارهای فرم اصلی رو حذف میکنه و ابزارهای فرم مورد نیاز رو به فرم اصلی اضافه میکنه
گمان میکنم که با این روش فقط کنترل ها اضافه میشن، تکلیف Event ها چی میشه ؟
شاید هم من منظور شما رو درست متوجه نشدم.

اگر لطف کنی با یک مثال برام توضیح بدی ممنوم میشم:لبخندساده:

kh1387
دوشنبه 30 شهریور 1388, 19:30 عصر
دوست خوبم من در این جور موارد از TableLayoutPanel استفاده می کنم.
خیلی روش راحتیه
در ضمن با منوها هم میشه و باید با خاصیت Enable اونها رو فعال و غیر فعال کنید.

Reza_Yarahmadi
دوشنبه 30 شهریور 1388, 19:59 عصر
گمان میکنم که با این روش فقط کنترل ها اضافه میشن، تکلیف Event ها چی میشه ؟
شاید هم من منظور شما رو درست متوجه نشدم.

اگر لطف کنی با یک مثال برام توضیح بدی ممنوم میشم
من نگفتم ابزارها رو کپی میکنیم (هر چند فکر کنم توی اون حالت هم کار کنه!) بلکه ابزارها رو منتقل میکنیم. توی این حالت تمامی رویدادها هم به همراه ابزار منتقل میشن.
برای امتحان یه پروژه ساده بسازید که فقط شامل 2 فرم باشه ، توی فرم 2 چندتا ابزار بزارید و برای چندتا از رویدادهاشون یه مقدار کد بنویسید. توی فرم1 (روی مثلا یه دکمه) کد زیر رو بنویسد. بعد ببینید رویدادها درست کار میکنن یا نه!
Form2 f2 = new Form2();
this.Controls.Clear();
foreach (Control ctrl in f2.Controls)
this.Controls.Add(ctrl);

shahab_ss
دوشنبه 30 شهریور 1388, 22:51 عصر
به نظر زیاد مطمئن نمیاد.
اما روش جالبی بود !
مرسی