PDA

View Full Version : سوال: حذف لیبل هایی که به صورت داینامیک ایجاد شده اند



IMANAZADI
جمعه 05 اسفند 1390, 20:10 عصر
با سلام خدمت دوستان
من یک برنامه نوشتم که توی اون حدود 100 تا لیبل به صورت داینامیک توسط یک تابع ساخته میشه
و توسط یک تابع دیگه 10 تا لیبل درست میشه حالا چطوری میتونم توی رویداد کلیک یک باتن لیبل های اولیه (همون 100 تا نه اون 10 تا ) را حذف کرد

این کد تابع اول هست



for (int i = 1 ; i <= 100 ; i++)
{

Label lb = new Label ();

lb.Text = i.ToString ();
lb.Name = i.ToString ();
lb.BackColor = Color.Transparent;
lb.TextAlign = ContentAlignment.MiddleCenter;
lb.Size = new Size (25 ,14);
lb.Location = new Point (214 - ( 28 * 7 ) ,90);

this.Controls.Add (lb);

}


کد تابع دوم شبیه کد بالاست ولی به جای 100 تا 10 تا تولید میکنه


من توسط کد زیر توی رویداد باتن لیبل ها رو حذف میکنم ولی یکی اینکه لیبل های تابع دوم رو پاک میکنه از 100 تا لیبل تابع اول هم همه رو پاک نمیکنه یعنی با هر با کلیک شاید 30 تا رو پاک کنه


foreach (Control ctrl in this.Controls)
{
if (ctrl is Label)
{
ctrl.Dispose ();

}
}



کسی میتونه راهنمایی کنه
ممنون میشم

Hybrid
جمعه 05 اسفند 1390, 21:15 عصر
سلام ،

یکی از راه های خوب اینه که بیای همه ی اون 100 تا لیبل رو در آرایه ای از Control ها ذخیره کنی و از اون طریق Dispose کنی ، اینم Sample ش :

دانلود (http://thelife.persiangig.com/other/WindowsFormsApplication1Csharp.rar)

موفق باشید./

shadi khanum
شنبه 06 اسفند 1390, 09:28 صبح
دوست عزیز همین loop که روی کنترل ها زدی رو یه ذره کاملتر کنی جواب میده.یه if بذار توش چک کن اگه (int)Nameاون کنترل کوچکتر مساوی 100 بود اون رو پاک کنید

IMANAZADI
شنبه 06 اسفند 1390, 16:11 عصر
دوست عزیز همین کار رو خواستم کنم ولی همه لیبل ها نامشون عدد نیست مثلا اون 100 تا عدد ولی اون 10 تا اسمه واسه همین برنامه خطا میگرفت
دوستان تایعی هست که با اون بشه تشخیص داد مثلا فلان کاراکتر عدد هست یا نه
یک تابعی توی وی بی یود اسمش اگه اشتباه نکنم ISNUMBER یود تشخیص میداد عدد یا نه

Hybrid
شنبه 06 اسفند 1390, 16:19 عصر
خوب فقط اسمشون فرق میکنه ولی راه حل شبیه همین نمونه کاری هست که واستون نوشتم(یعنی داخل آرایه ای از کنترل های قرار بده و بعد حذفشون کن).اون تابع داخل vb.net اسمش isnumeric هست .

shadi khanum
شنبه 06 اسفند 1390, 16:31 عصر
با تابع isnumric میتونی چک کنی که اگه اسمش عددی بود حالا Delete بشه

IMANAZADI
شنبه 06 اسفند 1390, 18:03 عصر
دوست عزیز (vbBoss )راه حل شما درست بود
فقط میخواستم به اون دوست عزیز توضیح بدم که گفته بود LOOP را گسترش بدی به جواب میرسی که من اون راه رو رفتم ولی همه لیبیل ها نامشون عدد نبود
راستی این تابع ISNUMRIC توی C#‎ هم هست ؟؟؟

Hybrid
شنبه 06 اسفند 1390, 19:26 عصر
راستی این تابع ISNUMRIC توی C#‎‎ هم هست ؟؟؟

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

shadi khanum
شنبه 06 اسفند 1390, 20:07 عصر
دوست عزیز (vbBoss )راه حل شما درست بود
فقط میخواستم به اون دوست عزیز توضیح بدم که گفته بود LOOP را گسترش بدی به جواب میرسی که من اون راه رو رفتم ولی همه لیبیل ها نامشون عدد نبود
راستی این تابع ISNUMRIC توی C#‎ هم هست ؟؟؟
nدوست عزیز نمیخواد شما زحمتشو بکشی، خود C# داره چنین تابعی!!

Int32 a = 0;
if (Int32.TryParse(ctrl.Name,out a))
{

// delete control
}