نمایش نتایج 1 تا 3 از 3

نام تاپیک: ایجاد Label ها در یک حلقه و مقدار دهی اندیس مشخصی از آرایه

  1. #1
    کاربر دائمی آواتار mandanim
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    کرج
    پست
    218

    ایجاد Label ها در یک حلقه و مقدار دهی اندیس مشخصی از آرایه

    سلام به دوستان عزیز
    من می خوام بعنوان مثال 40 تا label در فرمم بزارم و به labelها مقدار دهی کنم
    تا اینجا مشکلی نیست
    حالا اگه بخواهم با یک حلقه این کارو بکنم چه باید بکنم
    می خواهم label iرو مقدار دهی کنم
    با اندیس i
    تو اون لحظه اصلا مشخص نیست کدوم label هستش
    عدد مشخص می کنه که اون label کدومه
    Label I

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    قائمشهر
    پست
    268

    نقل قول: label i

    سلام
    اول از همه یک 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 ایجاد می کنه و خاصیت هر کدام را مقدار دهی می کنه.

  3. #3

    نقل قول: label i

    نقل قول نوشته شده توسط pedramfj مشاهده تاپیک
    سلام
    اول از همه یک 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 ایجاد می کنه و خاصیت هر کدام را مقدار دهی می کنه.
    سلام.
    کدی که نوشته اید قدری بو داره و میشه اونو بهتر از این نوشت...

    1. می تونید از امکانات زبان بهره ببرید و جای تکرار lbl[i] به شکلی که استفاده کرده اید، یک بار اونو Reference کنید.
    2. بهتره شرط پایانی حلقه رو 100 در نظر بگیرید و جای => از > استفاده کنید. البته بهتر از اون اینه که از lbl.Length برای گرفتن طول آرایه استفاده کنید و از تکرار عدد 100 نیز بپرهیزید (DRY).
    3. اضافه کردن 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);



    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •