PDA

View Full Version : سوال: ساختن کنترل در فرم با نام های مختلف



c-sharp_South
چهارشنبه 10 اردیبهشت 1393, 10:47 صبح
سلام دوستان.
فرض کنید من میخوام این رو توی فرم ام اضافه کنم:


Label B = new Label();
B.Location = new Point(100, 100);
B.Text = "My Button";
this.Controls.Add(B);

میخوام دو Int تعریف کنم . توی یکیش تقریبا مشکلی ندارم . دومی اینه :
من Label جدید رو B تعریف کردم. میخوام اگه دوباره همین کد رو بخونم یک Label جدید به اسم B1 ساخته بشه . و همینطور ادامه پیدا کنه تا Bn
ففقط میمونه تغییر نام و تغییر Location که با اون مشکلی ندارم و با + کردن به Int مشکلم حل میشه.
ممنون میشم راهنماییم کنید در مورد نام Label ها :قلب:

Davidd
چهارشنبه 10 اردیبهشت 1393, 11:07 صبح
يك ليست label تعريف كن و هربار يك Label به ليست اضافه كن. از طريف ايندكسش مي توني به متن و لوكيشن و ... دسترسي داشته باشي.

c-sharp_South
چهارشنبه 10 اردیبهشت 1393, 11:39 صبح
ممنون از پاسختون .
تا حلال با لیست لیبل کار نکردم . میشه یک نمونه کد بزارید؟ ممنون میشم.

Davidd
چهارشنبه 10 اردیبهشت 1393, 12:00 عصر
using System.Collections;

//
public partial class Form1 : Form
{
List<Label> lblList = new List<Label>();
private void YourMethod()
{
lblList.Add(new Label());
lblList[lblList.Count-1].Text="My Button"; //Access to last Label

}

}

c-sharp_South
چهارشنبه 10 اردیبهشت 1393, 12:12 عصر
ممنونم .
من به این صورت عمل کردم ولی بیشتر از 2 تا Label داره نمیسازه:


int i = 0;
private void button2_Click(object sender, EventArgs e)
{
List<Label> lblList = new List<Label>();
lblList.Add(new Label());
lblList[lblList.Count - 1].Text = "My Label" + i.ToString();
lblList[lblList.Count - 1].Location = new Point(100, 100 + i);
this.Controls.Add(lblList[lblList.Count - 1]);
i = +40;
}


مشکل از کجاست ؟
شرمنده اگه زیاد وارد نیستم در این مورد...

Davidd
چهارشنبه 10 اردیبهشت 1393, 13:02 عصر
شما داخل متد ليست ميسازي يعني هر بار كه روي دكمه كليك ميشه يك ليست جديد خالي ساخته ميشه ساخته ميشه. اگه مثالي كه زدم نگاه كني ميبيني كه تعريف ليست در خارج از متد اومده. كد به اين صورت بنويسيد :
int i = 0;
List<Label> lblList = new List<Label>();

private void button2_Click(object sender, EventArgs e)
{


lblList.Add(new Label());
lblList[lblList.Count - 1].Text = "My Label" + i.ToString();
lblList[lblList.Count - 1].Location = new Point(100, 100 + i);
this.Controls.Add(lblList[lblList.Count - 1]);
i = +40;
}




البته اگه شما جاي ديگه خارج از اين متد به ليبل ها نيازي نداري اصلا نيازي به ليست هم نيست. در صورتي كه ميخاي با اين ليست جاهاي ديگه هم كار كني مثلا متنشونو عوض كني يا حذفشون كني به ليست نياز داري.

c-sharp_South
چهارشنبه 10 اردیبهشت 1393, 18:56 عصر
من میخوام این کارو انجام بدم :
توی سافت من یک سری String هست که تعدادشون مشخص نیست و Update میشه.
شما فرض کنید من این لیست رو دارم که هر کدوم از اونها یک String هستن و قراره تکست هر کدوم از اونها به عنوان یک Label جدا توی برنامه قرار بگیره . مثلا:
iran#tehran#mashhad#tabriz#anzali#ahwaz#shiraz#qom #yasooj
میخوام برنامم بیاد این مقدار ها رو بخونه و به تعدادشون یک مقدار قرار بده.
label1 = iran
label2 = tehran
label3 = mashhad
...
در جای دیگه قرار نیست ازشون استفاده بشه . فقط قراره داخل برنامه نمایش داده بشن این اطلاعات.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
لیست رو در خارج از متد هم تعریف کردم . 2 تا label بیشتر نمیسازه. :اشتباه:

c-sharp_South
جمعه 12 اردیبهشت 1393, 10:51 صبح
کسی نیست راهنمایی کنه ؟ 2 روز صبر کردم :گریه::افسرده::اشتباه:
~~~~~~~~~~~~~~~~~~~~~
من فقط این رو میخوام :
بتونم مولتی کنترل با ویژگی های خاص درست کنم !!! توی کدهای بالا تست کردم بیشتر از 2 تا کنترل نمیشه ساخت...

Alfred188
جمعه 12 اردیبهشت 1393, 11:53 صبح
سلام، شما می خواهید به تعداد نا محدود یه کنترل مثلا لیبل رو تو فرمتون اضافه کنید درسته؟
من معمولا اینطوری کار می کنم:

for(int i=0;i<10;i++){
Label l1 = new Label();
l1.Name = "mylabel" + i.ToString();
l1.Text = "myText";


Label l2 = new Label();
l2.Name = "ml2" + i.ToString();
l2.Text = "myText2";
}



فقط کافیه کنترل های جدید اسم دیگه ای داشته باشن

c-sharp_South
جمعه 12 اردیبهشت 1393, 12:11 عصر
ممنون درسته.
ولی بحث اینه که تعداد کنترل هایی که قراره داشته باشم معلوم نیست و یک جورایی توسط خود کاربر تعیین میشه.
یک سوال . میشه زمانی که میخوام یک label جدید تعریف کنم توی اسمش از int استفاده بشه ؟
مثلا l1 l2 l3 l4 .... . اینجوری بعد از تعیین شدن تعداد label ها با یک حلقه میتونم تمام label ها رو بسازم.
هرچی سعی کردم نمیشه که مثلا اینجور استفاده کنم:
label l+i.tostring = new label();
خطا داره.

Alfred188
جمعه 12 اردیبهشت 1393, 12:27 عصر
خوب شما نمی تونید اسم کنترل رو اونطوری که گفتید نمی تونید بسازید.
ببینید، مثلا کاربر با زدن یه کلید می خواد یه لیبل رو به یه پنل اضافه کنه:


int MyRows=0;
private void button1_Click(object sender, EventArgs e)
{
generate();
}


void generate()
{
int i = MyRows;
MyRows++;
int top = 30 * i + 45; // distance from top for each line


Label l1 = new Label();
l1.Name = "label0" + i.ToString();
l1.Width = 25;
l1.Left = panel1.Width - 45;
l1.Top = top;
l1.Text = ((int)(i + 1)).ToString();
l1.ForeColor = System.Drawing.Color.Blue;
panel1.Controls.Add(l1);


TextBox l2 = new TextBox();
l2.Name = "item" + i;
l2.Left = panel1.Width - 180;
l2.Top = top;
l2.Width = 130;
l2.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
l2.Font = new Font(label2.Font.FontFamily, 8.25f);
panel1.Controls.Add(l2);






}

با این کا میشه به تعداد بالا به پنل کنترل لیبل و تکست باکس اضافه کرد.

c-sharp_South
جمعه 12 اردیبهشت 1393, 14:42 عصر
آقا بسیار تشکر
حل شد :قلب: دقیقا جوری که میخواستم :خجالت:
( شرمنده اگه این پست ام اسپم حساب میشه )