PDA

View Full Version : پاک کردن کنتترلها در رویداد کنترل دیگر



saeidgab
چهارشنبه 06 آذر 1387, 19:34 عصر
سلام ، من یه فرم دارم که تو اون با اطلاعاتی که از دیتابیس میگیرم چند دسته خدمات به کاربر نشون میدم که این خدمات به صورت radiobutton قابل انتخاب هستن که با انتخاب هزکدوم آن دسته از خدمات به صورت checkbox نشون داده میشه .حالا نمیدونم چطوری وقتی radiobutton جدیدی رو کاربر انتخاب کرد checkbox مربوط به radiobutton قبلی رو پاک کنم؟ با تمام تلاشی که کردم تنها تونستم آخرین checkbox ایجاد شده رو پاک کنم و به باقی checkbox دستسرسی ندارم. لطفا کمک کنید!

رافعی مهدی
شنبه 09 آذر 1387, 10:23 صبح
سلام
آيا به ازاي هر دسته از خدماتي كه ارائه ميشه (هر RadioButton) در زمان طراحي CheckBox هاي مورد نظر رو در فرم قرار داده‌ايد يا اينكه اين چك باكس ها رو در زمان اجرا ايجاد مي‌كنيد؟


.

s_ahmadneya
شنبه 09 آذر 1387, 12:05 عصر
سلام ، من یه فرم دارم که تو اون با اطلاعاتی که از دیتابیس میگیرم چند دسته خدمات به کاربر نشون میدم که این خدمات به صورت radiobutton قابل انتخاب هستن که با انتخاب هزکدوم آن دسته از خدمات به صورت checkbox نشون داده میشه .حالا نمیدونم چطوری وقتی radiobutton جدیدی رو کاربر انتخاب کرد checkbox مربوط به radiobutton قبلی رو پاک کنم؟ با تمام تلاشی که کردم تنها تونستم آخرین checkbox ایجاد شده رو پاک کنم و به باقی checkbox دستسرسی ندارم. لطفا کمک کنید!

از طریق پروپرتی controlsفرم به صورت runtimeبه کنترلهای روی فرم می تونی دسترسی داشته باشی سعی کن در صورت نیاز کدش را قرار می دهم

saeidgab
شنبه 09 آذر 1387, 18:35 عصر
سلام
آيا به ازاي هر دسته از خدماتي كه ارائه ميشه (هر RadioButton) در زمان طراحي CheckBox هاي مورد نظر رو در فرم قرار داده‌ايد يا اينكه اين چك باكس ها رو در زمان اجرا ايجاد مي‌كنيد؟


.
RadioButton ها و checkbox ها در زمان اجرا و با استفاده از اطلاعاتی که از بانک گرفته میشه ایجاد میشه، یعنی در هر بار اجرا ممکن تعدادشون تغییر کنه. لطفا اگه شما هم راه حلی در نظر دارید مطرح کنید. با تشکر.

saeidgab
شنبه 09 آذر 1387, 18:44 عصر
از طریق پروپرتی controlsفرم به صورت runtimeبه کنترلهای روی فرم می تونی دسترسی داشته باشی سعی کن در صورت نیاز کدش را قرار می دهم
خیلی سعی کردم ولی خوب آماتورم منشورتونو نفهمیدم. لطفا اگه میشه یکم بیشتر توضیح بدین یا کدش قرار بدیین، با تشکر.

رافعی مهدی
یک شنبه 10 آذر 1387, 09:38 صبح
سلام
عرض شود كه براي انجام دادن اين كار الگوريتمهاي مختلفي مي‌توان نوشت. راه حلي كه من ازش استفاده كردم بصورت زير است:

تعريف: كنترل هاي موقتي كنترلهايي از فرم شما هستند كه تحت شرايط خاص به فرم شما اضافه و كم مي‌شوند. مثلاً اين شرايط در مسئله‌ي شما توسط اطلاعات موجود در بانك تعيين مي‌شوند.
در پروژه‌ي نمونه اي كه براتون پيوست كردم اين شرايط توسط چهار تا RadioButton به نام هاي Cond.1 تا Cond.4 تعيين مي‌شوند. با انتخاب هر كدام از اين دكمه هاي راديويي شرايط به وجود آمدن يه سري كنترل ديگر كه فرآهم مي‌شود و همزمان بايد ساير كنترلهايي كه به صورت موقتي روي فرم ايجاد شده بودند، حذف شوند.
خب براي انجام دادن اين كار Tag كنترلهاي موقتي رو مساوي "Temporary" قرار ميدهيم و از يك متد براي حذف هر كنترلي كه داراي Tag معادل كلمه‌ي "Temporary" است، به صورت زير استفاده مي‌كنيم:




private void RemoveAllTemporaryControls(Control.ControlCollecti on collection)
{
for (int i = 0; i < collection.Count; i++)
{
Control ctrl = collection[i];
if (ctrl.Controls.Count != 0) RemoveAllTemporaryControls(ctrl.Controls);
if ((string)ctrl.Tag == "Temporary")
{
collection.Remove(ctrl);
i = 0;
}
}
}


نكته: توجه كنيد كه اين يك متد بازگشتي است، چون كه يه سري از كنترلها هستند كه خودشون به تنهايي در برگيرنده‌ي تعدادي كنترل ديگر هستند، مثل GroupBox ها. در كالكشن كنترلهاي فرم، كنترلهاي داخلي مربوط اين نوع از كنترلها (به عنوان كنترلهاي فرزند) به حساب نمي‌آيند. مثلاً در فرمي كه تمامي كنترلهاي آن در يك GroupBox قرار داده شده باشند، مقدار this.Controls.Count برابر 1 خواهد بود!