PDA

View Full Version : مبتدی: آرایه در آوردن لیبل ها



reza0916
شنبه 14 دی 1392, 05:19 صبح
سلام
من چند لیبل در form دارم به نامهای (مثلا)

lbl1
lbl2
lbl3
lbl4
lbl5
.
.
.
در جای از برنامه باید عناصر یک آریه را بترتیب به لیبل ها نسبت بدم مثلا

lbl1.Text=Ar[1]
lbl2.Text=Ar[2]
lbl3.Text=Ar[3]
lbl4.Text=Ar[4]
lbl5.Text=Ar[5]

میخواستم بپرس راهی وجود نداره لیبلها رو هم بصورت آرایه تا بشه با یه حلقه راحتتر این برنامه رو نوشت/؟

masoud.try
شنبه 14 دی 1392, 10:32 صبح
List<Label> labels = new List<Label>();
foreach (Control c in this.Controls)
{
if (c is Label")
{
labels.Add(c as Label);
}
}
از اینجا به بعد لیبلاتو داخل ارایه داری هر کاری می خوای بکن.

labels[0].Text = "Yechi";

reza0916
شنبه 14 دی 1392, 17:13 عصر
ممنونم از پاسخت
من خواستم همین رو بری تکست باکس ه انجام بدم که نمیشه
List<TextBox> txtC= new List<TextBox>();
foreach (Control c in this.Controls)
{
if (c is TextBox) { txtC.Add(c as TextBox);
}

نام text box های من
txtC1
txtC2
txtC3
.
.

masoud.try
یک شنبه 15 دی 1392, 12:29 عصر
ممنونم از پاسخت
من خواستم همین رو بری تکست باکس ه انجام بدم که نمیشه
List<TextBox> txtC= new List<TextBox>();
foreach (Control c in this.Controls)
{
if (c is TextBox) { txtC.Add(c as TextBox);
}

نام text box های من
txtC1
txtC2
txtC3
.
.

مشکل چیه ککه نشد؟

Mousavmousab
یک شنبه 15 دی 1392, 18:09 عصر
دوست عزیز بهتره شما کنترا ها را به صورت استا روی فرم قرار ندی تا در زمان ران تایم پروژتو خوب Handle کنی
منظورم اینه که شما اول از همه سعی کن اشیا را به صورت داینامیک تولید کن روی فرم بعد دیگه فکر نکنم مشکلی داشته باشی
به مثال زیر دقت کن :


private void Form1_Load(object sender, EventArgs e)
{

//making dynamic buttons
Button[] btns = new Button[10];
int btnXPositionOnForm = 10;
int btnYPositionOnForm =10;
for (int i = 0; i < btns.Length; i++)
{
btns[i] = new Button();
btns[i].Text = "btn#: " + i.ToString();
btns[i].Click += new EventHandler(btn_click);
btns[i].Location = new Point(btnXPositionOnForm, btnYPositionOnForm);
btnYPositionOnForm += btns[i].Height + 10;
}

this.Controls.AddRange(btns);

}

private void btn_click(object sender, EventArgs e)
{
// get to know which button is pressed.
Button temp = (Button)sender;
MessageBox.Show(temp.Text);
}





فکر کنم بتونی کد های این مثال را متناسب کار خودت تغییر بدی
در ضمن اگه بخوای کار قبلی ات را انجام بدی می تونی از Generic به این صورت که حرفه ای تر هم است استفاده کنی


foreach (var btn in this.Controls.OfType<TextBox>())
{
btn.Text = "something";
}


مزیتش اینه که کار اضافه انجام نمیدی ، یعنی با دستور IF دیگه شرط نمی کذاری
موفق باشی

reza0916
دوشنبه 16 دی 1392, 09:08 صبح
یه سوال :
در کد زیر بوسیله یه buttun1 یه گروه تست باکس تولید میشه حالا چطور میتونم با یه buttun دیگه چیزی ازش دریافت یا وارد کنم
اصلا buttun دومی تست باکس ها رو نمیشناسه . ...
کد من :
private void button1_Click(object sender, EventArgs e)
{
TextBox[] txtC = new TextBox[10];

int txtCX = 80; int txtCY = 180;

for (int i = 1; i < txtC.Length; i++)//////////////
{
txtC[i] = new TextBox();

txtC[i].Location = new Point(txtCX, txtCY);



txtCY += txtC[i].Height + 5;

}
this.Controls.AddRange(txtC);

}

private void button2_Click(object sender, EventArgs e)
{
txtC[2].text = "ok";


}
خط قرمز رنگ ارور میده

sagggad
دوشنبه 16 دی 1392, 09:38 صبح
شما باید متغیری که در خط زیر هست رو به صورت سراسری تعریف کنی:

TextBox[] txtC = new TextBox[10];

یعنی این خط رو از داخل رویداد باتون بردار و بذارش زیر: public partial class Form1 : Form
در اون صورت این متغیر در همه جا قابل استفاده است...