PDA

View Full Version : سوال: حذف User Control ها از روی Form



harani
یک شنبه 14 خرداد 1391, 00:17 صبح
من یک فرم به شکل زیر طراحی کردم .

87813
همانطور که میبینید فرم حاوی دو button افزودن و حذف است . حال من یک user cotrol با نام Maharat ساختم به شکل زیر:

87810
حال user control را پس از ایجاد build کردم و یکی روی فرم قرار دادم که بشکل زیر در آمد .

87812
با اجرای برنامه با فشردن دکمه افزودن چندین user control به فرم اضافه میشود .

87811
حال چگونه میتوانم آن user control هایی که مطابق شکل چک باکشان تیک خورده را با فشردن button حذف از فرم حذف کنم ؟
منون میشم سریعتر جواب بدهید . جواباتون با کد مطرح کنید . با سپاس

خودمم یک کدی نوشتم لطفاً اگه کد درست را نمی دانید . اشتباه کد زیر را بگیرید .



private void btn_Add_MaharatSabt_Click(object sender, EventArgs e)
{
Maharat m = new Maharat();
Control ctrlBase = maharat1;
y += ctrlBase.Height + ctrlBase.Top + 20;
x = ctrlBase.Location.X;

m.Location = new Point(x, y);
this.Controls.Add(m);

}

private void btn_Del_MaharatSabt_Click(object sender, EventArgs e)
{
Maharat m = new Maharat();

foreach (Control ctrl in this.Controls)
{
if (ctrl.GetType() == typeof(Maharat) && m.chbSelect_Maharat.Checked)
{
this.Controls.Remove(ctrl);

}

}
}

jannatmakan
یک شنبه 14 خرداد 1391, 02:30 صبح
سلام. مطمئن نیستم که سوالتونو درست فهمیده باشم. ولی به هر حال این جواب منه :

با فرض این که user control شما اسمش us باشه و تیک خوردن یا نخوردن usercontrol شما با صفت checked مشخص بشه؛ اگر در دکمه افزودن شبه کد زیر رو استفاده کنید:


private void afzoodan_Click(object sender, events e)
{
public static int i=0 ;
public us[] myus=new us[100];
myus[i].createcontrol();
i++;
}

همونطور که می دونید با متد CreateControl از نوع usercontrol شما یکی تولید می شه. و در رویداد کلیک مربوط به به دکمه حذف هم می شه مشابه کد زیر رو نوشت که با استفاده از متد Dispose ،
usercontrol خودتون رو می تونید حذف کنید.


private void hazf_Click(object sender, events e)
{
for(int j=0;j<i;j++)
{
if(myus[j].checked==checked)
{
myus[j].Dispose ();
i--;
}
}
}

ahmadreza517
یک شنبه 14 خرداد 1391, 11:19 صبح
به نام تنها برنامه نویس هستی
سلام ,

نمونه پروژه

Miladkt.S.A.o
یک شنبه 14 خرداد 1391, 11:55 صبح
سلام دوست عزیز

Panel_Name.Controls.Remove(control value);
با کد بالا اگر اسم پنل شما Panel_Name باشد
تنها کافی است از usercontrol مورد نظر یک object
بسازید و در پرانتز قرار دهید
برای انکه هم ببینید که تیک خورده یا نه میتوانید با یک حقله این کار را انجام دهید
به این صورت که روی کنترل های موجود در پنل یک حلقه زده با تابع GetType
ان را شناسایی کرده و روی ان حلقه دیگری بزنید که وضعیت هر انجه را که میخواهید چک کند

harani
دوشنبه 15 خرداد 1391, 02:38 صبح
در مورد تابع GetType لظفاً بیشتر توضیح بدهید در صورت امکان یک مثال با این تابع (که بهتر کد سوال خودم را) برای من بزنید .