PDA

View Full Version : سوال: مشکل در Foreach



hamed-lavafi
دوشنبه 26 خرداد 1393, 02:33 صبح
سلام

من یک UserControl ساختم و قراره هنگام اجرای برنامه تعدادی از اون روی فرم لود بشه
میخواستم توسط Foreach اون هایی که خاصیت Checked دارن رو حذف کنم اما توی حلقه ی foreach ارور میده

foreach (Message m in this.Controls) {
if (m.Checked==true)
{
this.Controls.Remove(m);
}


}


ارور هم اینه :
Unable to cast object of type 'System.Windows.Forms.Panel' to type 'MessagingSystem.Message'.

پیشاپیش ممنون

Hadoop
دوشنبه 26 خرداد 1393, 03:14 صبح
Message دیگه چیه ؟

مشکل اصلی غیر از اون . اینه که تمام کنترلهای روی فرم که پراپرتی Checked رو ندارند . فقط چک باکسهات دارند . بنابراین مثلا این خطا داره میگه الان در حلقه کنترلی که دارم یک پنل هستش و داره سعی میکنه خاصیت Checked رو از پنل میخونه که نداره . پس خطا میده

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

NASA's Spaceman
دوشنبه 26 خرداد 1393, 10:51 صبح
مشکل و حلقت نیست و مشکل توی دستور شرطی if خودت هست
چون m.checked اصلا وجود نداره
با سپاس Spaceman

aliagamon
دوشنبه 26 خرداد 1393, 11:01 صبح
دلیل این نیست دلیل اینه که این میاد همه کنترل هارو میریزه تو یه متغیر messge اما پنل که قابل تبدیل نیست به message :لبخند:
حلقه رو اینطوری بنویس درست میشه ...

foreach (Control control in this.Controls)
{
if (control is Message)
this.Controls.Remove(control);
}

hamed-lavafi
دوشنبه 26 خرداد 1393, 14:58 عصر
ممنون از دوستان، توسط راهنمایی های شما مخصوصا آقا علی مشکل رو حل کردم

من موقع ساخت usercontrol یک مشخصه براش تعریف کردم به نام Checked که وقتی چک باکس اون فعال میشه این مشخه true میشه، چیزی که علی آقا گفتن مشکل رو حل میکنه اما یک مشکل دیگه به وجود میاره و اونم اینه که دیگه control از نوع message نیست که بتونم خاصیت checked رو براش چک کنم.

اینم کدش بعد از رفع مشکل:


List<Control> messages = new List<Control>();
foreach (Control c in Inbox_panel.Controls)
{
if (c is Message)
messages.Add(c);
}


foreach (Message m in messages)
{
if (m.Check == true)
Inbox_panel.Controls.Remove(m);
}


تشکر فراوان