PDA

View Full Version : پاک کردن Objectها از روی فرم



مهدی رحیم زاده
سه شنبه 13 شهریور 1386, 21:05 عصر
من با این کد یک سری picturebox روی فرمم ایجاد می کنم ...

PictureBox picbox;
picbox = new PictureBox();
picbox.Name = "picBox" + creat_object_counter.ToString();
picbox.BackColor = System.Drawing.Color.Transparent;
picbox.Image = global::city_map.Properties.Resources.work1;
picbox.Location = new Point(x, y);
picbox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchIma ge;
picbox.Size = new Size(30, 30);
toolTip1.SetToolTip(picbox, "this is the sample");

حالا می خوام که همه این Objectها رو که خودم موقع مدنویسی ایجاد کردم از روی فرم حذف کنم ، برای این کار باید چکار کنم ...

Capitan zapoa 2000
سه شنبه 13 شهریور 1386, 21:26 عصر
picturebox.dispose()

مهدی رحیم زاده
چهارشنبه 14 شهریور 1386, 20:39 عصر
حالا فرض کنید که من با یک حلقه 15 تا Object روی فرم ایجاد کردم و می خوام این 15 تا رو از روی فرم پاک کنم برای این کار باید چکار کنم ...

mahani
چهارشنبه 14 شهریور 1386, 21:16 عصر
اگه آبجکتهای مختلف داری(بصورت آرایه ای هم تعریف نشده اند) به نظر من بهترین راه اینه:

for (i = 0; i < n; i++)
this.Controls[i].Dispose();
فقط رنج متغیر i رو درست تعیین کن

ghafoori
چهارشنبه 14 شهریور 1386, 21:30 عصر
با یک حلقه همه انها را حذف می کنی مثلا به این صورت


FOR(creat_object_counter=1;creat_object_counter<=15;creat_object_counter++){
this.controls["picBox" + creat_object_counter.ToString()[.dispose();
}

مهدی رحیم زاده
پنج شنبه 15 شهریور 1386, 22:07 عصر
ghafoori عزیز کد درست کار نکرد ، میشه یه نمونه برنامه بزارید ...

mahani
پنج شنبه 15 شهریور 1386, 23:17 عصر
اگه اسمه pictureBoxهات picBox باشه و همچنین از picBox1 تا picBox15 داشته باشی کد بالا درست کار میکنه

مهدی رحیم زاده
جمعه 16 شهریور 1386, 11:14 صبح
اگه دقت کنید اسم همونه و تعداد هم درسته ، اما نمیشه ...

SalarSoft
جمعه 16 شهریور 1386, 11:21 صبح
کد بالا درسته فقط غلط املایی داره


for(int i=0;i<15 ;i++)
{
PictureBox picbox = new PictureBox();
picbox.Name = "picBox" + i.ToString();
this.Controls.Add(picbox );
}

for(int i=0;i<15 ;i++)
{
Controls["picBox" + i.ToString()].Dispose();
}

مهدی رحیم زاده
جمعه 16 شهریور 1386, 11:42 صبح
این کدی که من نوشتم :

picbox = new PictureBox();
for (int i = 2; i <= creat_object_counter; i++)
picbox.Controls["picBox" + i.ToString()].Dispose();
این اشکال رو روش میگیره :

Object reference not set to an instance of an object

mahani
جمعه 16 شهریور 1386, 12:30 عصر
2 تا اشکال داره.
1- بجای picbox.Controls بنویس this.Controls
2- بجای Controls["picBox" بنویس Controls["picbox"

مهدی رحیم زاده
جمعه 16 شهریور 1386, 20:44 عصر
این برنامه رو نگاه کنید همون کار هایی که گفتید رو انجام دادم اما نمیشه ...
ببینید شما می تونید درستش کنید ...

ghafoori
شنبه 17 شهریور 1386, 10:19 صبح
دوست عزیز باید هم نشان ندهد کدهایی برای شما فرستاده شده برای حذف و اضافه به فرم بوده نه به picturebox این هم پروژه شما با دو تغییر
10795

مهدی رحیم زاده
شنبه 17 شهریور 1386, 22:38 عصر
این برنامه شما یک مشکل داره ...
دفعه اول درست همه رو پاک میکنه ، اما بعد از اون دیگه پاک نمیکنه ، چرا؟؟؟

ghafoori
یک شنبه 18 شهریور 1386, 08:12 صبح
این کد را بعد از کدهای dispose بزار مشکل حل می شود

creat_object_counter = 2;

gomnam
یک شنبه 18 شهریور 1386, 10:33 صبح
اگه همه کنتر ل هایی که به pictureBox1 اضافه میشوند فقط از نوع pictureBox هستند و یا اینطوری بگم که اگه میخوای تمامی کنترل هایی را که روی یه کنترل دیگه هستند پاک کنی از دستور زیر استفاده کن



this.[parentControlName].Controls.Clear();

که برای برنامه شما به جای parentControlName باید pictureBox 1 را بذاری

اما اگه نوع آبجکت ها برات مهم هستند
فرض کن روی pictureBox1 غیر از pictureBox یه button و چند تا textBox و ... هم یه pictureBox اضافه کردی حالا اگه بخوای فقط pictureBox را پاک کنی دیگه نمیتونی از دستور فوق استفاده کنی چون در این صورت همه آبجکت ها اعم از button و .... هم پاک میشند
در اینجور موارد میتونی از یه حلقه foreach استفاده کنی
چیزی شبیه به این





foreach (Control ctrl in this.pictureBox1.Controls)
{

if (ctrl is PictureBox)
{
ctrl.Dispose();
}

}



در واقع با کد فوق میاید و در بین آبجکت هایی که به کنرل pictureBox1 اضافه کردین چک میکنین که کدوم آبجکت ها از نوع pictureBox هستند و بعد اونا را dispose میکنید

البته چون در حال حاضر دات نت ندارم کد فوق را تست نکردم (چون معتقدم که کد تست شده به هیچ عنوان نباید گذاشت که دیگران به گمراهی کشیده نشوند) که از این بابت عذر خواهی میکنم ولی روتین کار به همین شکلیه که عرض کردم

موفق باشید