mandanim
یک شنبه 13 آذر 1390, 12:11 عصر
سلام به دوستان عزیز
من می خوام بعنوان مثال 40 تا label در فرمم بزارم و به labelها مقدار دهی کنم
تا اینجا مشکلی نیست
حالا اگه بخواهم با یک حلقه این کارو بکنم چه باید بکنم
می خواهم label iرو مقدار دهی کنم
با اندیس i
تو اون لحظه اصلا مشخص نیست کدوم label هستش
عدد مشخص می کنه که اون label کدومه
Label I
pedramfj
یک شنبه 13 آذر 1390, 12:41 عصر
سلام
اول از همه یک flowLayoutPanel به فرم اضافه کن.
تعریف آرایه ای از نوع Label Label[] lbl=new Label[100];
for (int i = 0; i <=99; i++)
{
lbl[i] = new Label();
lbl[i].BackColor = System.Drawing.Color.Transparent;
lbl[i].ForeColor = System.Drawing.Color.DimGray;
this.label1.Location = new System.Drawing.Point(90,10);
lbl[i].Name = "label"+i;
lbl[i].Size = new System.Drawing.Size(80,50);
this.label1.TabIndex = 1;
lbl[i].BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
lbl[i].Text = ""+i;
flowLayoutPanel1.Controls.Add(lbl[i]);}
این کد به تعداد حلقه for بر روی فرم label ایجاد می کنه و خاصیت هر کدام را مقدار دهی می کنه.
mehdi.mousavi
یک شنبه 13 آذر 1390, 13:40 عصر
سلام
اول از همه یک flowLayoutPanel به فرم اضافه کن.
تعریف آرایه ای از نوع Label Label[] lbl=new Label[100];
for (int i = 0; i <=99; i++)
{
lbl[i] = new Label();
lbl[i].BackColor = System.Drawing.Color.Transparent;
lbl[i].ForeColor = System.Drawing.Color.DimGray;
this.label1.Location = new System.Drawing.Point(90,10);
lbl[i].Name = "label"+i;
lbl[i].Size = new System.Drawing.Size(80,50);
this.label1.TabIndex = 1;
lbl[i].BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
lbl[i].Text = ""+i;
flowLayoutPanel1.Controls.Add(lbl[i]);}
این کد به تعداد حلقه for بر روی فرم label ایجاد می کنه و خاصیت هر کدام را مقدار دهی می کنه.
سلام.
کدی که نوشته اید قدری بو داره و میشه اونو بهتر از این نوشت...
می تونید از امکانات زبان بهره ببرید و جای تکرار lbl[i] به شکلی که استفاده کرده اید، یک بار اونو Reference کنید.
بهتره شرط پایانی حلقه رو 100 در نظر بگیرید و جای => از > استفاده کنید. البته بهتر از اون اینه که از lbl.Length برای گرفتن طول آرایه استفاده کنید و از تکرار عدد 100 نیز بپرهیزید (DRY).
اضافه کردن Label دونه به دونه به Flow Layout Control ایده جالبی نیست و موجب پردازش زیادی میشه. بهتره، جای Add از AddRange استفاده کنید و کل آرایه رو یکباره به تابع مربوطه بدید.
با توجه به مطالب فوق، میتونید کد رو Refactor کرده و بدین شکل بنویسید:
Label[] lbl = new Label[100];
for (int i = 0; i < lbl.Length; i++)
{
lbl[i] = new Label
{
BackColor = Color.Transparent,
ForeColor = Color.DimGray,
Location = new Point(90, 10),
Name = "label" + i,
Size = new Size(80, 50),
TabIndex = 1,
BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle,
Text = "whatever" + i,
};
}
this.flowLayoutPanel1.Controls.AddRange(lbl);
اما اگر در استفاده از LINQ محدودیتی ندارید، میتونید کد فوق رو بدین شکل نیز بنویسید:
Control[] labels = Enumerable.Range(0, 100).Select(i => new Label
{
BackColor = Color.Transparent,
ForeColor = Color.DimGray,
Location = new Point(90, 10),
Name = "label" + i,
Size = new Size(80, 50),
TabIndex = 1,
BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle,
Text = "whatever" + i,
}).ToArray();
this.flowLayoutPanel1.Controls.AddRange(labels);
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.