PDA

View Full Version : حرفه ای: نام گذاری اشیا ساخته در runtime



HjSoft
سه شنبه 01 تیر 1389, 15:01 عصر
سلام ،
من کدی رو آماده کردم که اشیایی رو در زمان runtime میسازه . تعداد این عناصر مشخص نیست و به تعداد کلیک کاربر بستگی داره .
توضیح : ما در vb به این صورت عمل می کردیم که مثلا : label(index).caption = x

HjSoft
سه شنبه 01 تیر 1389, 16:15 عصر
بچه من تا اینجاش رو نوشتم ، اما بازم error میده .

int i = 1;
for (i = 0; i < 11; i++)
{
Label[] lbl = new Label[10];
lbl[i].Location = new Point(0, 0);
lbl[1].Visible = true;
lbl[i].Text = i.ToString();
lbl[i].BackColor = Color.Red;
this.Controls.Add(lbl[i]);
}


اما در زمان اجرا در خط بعد از new label این ارور رو میده :
Object reference not set to an instance of an object

naser2009
سه شنبه 01 تیر 1389, 16:50 عصر
سلام دوسته من از این کد استفاده کن
جهت ساختن کنترل ها و کار کردن با آن ها در حالت Runtime


private void Form1_Load(object sender, EventArgs e)
{
int MyControlCount = 100;
int newX=0, newY=0;
for (int i = 0; i < MyControlCount; i++)
{
Label lbl = new Label();
lbl.Name = "lbl" + i.ToString();//baraye dastresi dar hengam code nevisi
lbl.Location = new Point(newX,newY );
lbl.Visible = true;
lbl.Text = i.ToString();
lbl.BackColor = Color.Red;
lbl.Click += new EventHandler(lbl_Click);
this.Controls.Add(lbl);
newY += lbl.Height;
}
}
void lbl_Click(object sender, EventArgs e)
{
Label l = (Label)sender;
MessageBox.Show(l.Text);
}

حامد مصافی
سه شنبه 01 تیر 1389, 16:56 عصر
Label[] lbl = new Label[10];
توجه : شما آرايه را new كرديد، اما كلاس Label را نه!

HjSoft
چهارشنبه 02 تیر 1389, 20:58 عصر
امکانش هست ، بیشتر توضیح بدید ؟
ممنونم

Saeed.Masoumi
پنج شنبه 03 تیر 1389, 07:42 صبح
سلام توی مثال زیر من فرض می کنم روی فرم N تا کنترل تکست باکس موجود است.با فشردن Button1 همه آنها را نام گزاری می کنم و سپس برای اینکه نشان دهمنام گذاری درست بوده است محتوای داخل تکست باکس را برابر نامشان می گذارم:


private void button1_Click(object sender, EventArgs e)
{
int i=0;
foreach (Control ctrl in this.Controls)
{
if (ctrl.GetType().Equals(typeof(TextBox)))
{
TextBox TxtBx = (TextBox)ctrl;
TxtBx.Name = string.Format("TextBox{0:0}", i++);
TxtBx.Text = TxtBx.Name;
}
}
}