PDA

View Full Version : ایجاد یک کنترل (textbox) توسط متد یک کلاس بر روی فرم



mosi4224
یک شنبه 20 اسفند 1391, 22:11 عصر
سلام
دوستان من یه کلاس تعریف کردم که برای ورود اطلاعات به متغییرهای اون از متدی استفاده میشود که بوسیله کد کنترلها رو ایجاد میکنه.
الان به این مشکل برخوردم که نمیتونم این کنترلها رو به فرمی که شی نمونه کلاس در آن ساخته شده اضافه کنم


public class Payment
{
public TextBox Price = new TextBox();
public void Drowing()
{

Price.Location = new System.Drawing.Point(200, 100);
Price.Name = "Price";
Price.Size = new System.Drawing.Size(97, 20);
Price.TabIndex = 1;

}
}

private void Pay_Load(object sender, EventArgs e)
{
Payment P = new Payment();
P.Drowing();
}


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


Controls.Add(Price);

the king
یک شنبه 20 اسفند 1391, 22:56 عصر
سلام
دوستان من یه کلاس تعریف کردم که برای ورود اطلاعات به متغییرهای اون از متدی استفاده میشود که بوسیله کد کنترلها رو ایجاد میکنه.
الان به این مشکل برخوردم که نمیتونم این کنترلها رو به فرمی که شی نمونه کلاس در آن ساخته شده اضافه کنم


public class Payment
{
public TextBox Price = new TextBox();
public void Drowing()
{

Price.Location = new System.Drawing.Point(200, 100);
Price.Name = "Price";
Price.Size = new System.Drawing.Size(97, 20);
Price.TabIndex = 1;

}
}

private void Pay_Load(object sender, EventArgs e)
{
Payment P = new Payment();
P.Drowing();
}


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


Controls.Add(Price);


شما یک کلاس عادی رو که خودش Control نیست و روی فرم قرار نمی گیره رو شامل یک TextBox کردید که کنترل ئه و طبیعتا
باید روی یک فرم یا کنترل قرار بگیره، یکم غیر عادی یه :

public class Payment
{
public TextBox Price = new TextBox();

public Payment()
{
Price.Location = new System.Drawing.Point(200, 100);
Price.Name = "Price";
Price.Size = new System.Drawing.Size(97, 20);
Price.TabIndex = 1;
}
}



this.Controls.Add(new Payment().Price);


بهتر بود که خود Payment یک نوع Control می بود تا بشه روی فرم قرارش داد. الان شما وقتی Price روی فرم قرار گرفت دیگه Payment تون
مجزا از Price شده، اگه متغیر عمومی برای نگهداری شی Payment نداشته باشید شی p ئه حذف میشه و دیگه شیء اش رو ندارید.

mosi4224
یک شنبه 20 اسفند 1391, 23:07 عصر
شما یک کلاس عادی رو که خودش Control نیست و روی فرم قرار نمی گیره رو شامل یک TextBox کردید که کنترل ئه و طبیعتا
باید روی یک فرم یا کنترل قرار بگیره، یکم غیر عادی یه :

public class Payment
{
public TextBox Price = new TextBox();

public Payment()
{
Price.Location = new System.Drawing.Point(200, 100);
Price.Name = "Price";
Price.Size = new System.Drawing.Size(97, 20);
Price.TabIndex = 1;
}
}



this.Controls.Add(new Payment().Price);


بهتر بود که خود Payment یک نوع Control می بود تا بشه روی فرم قرارش داد. الان شما وقتی Price روی فرم قرار گرفت دیگه Payment تون
مجزا از Price شده، اگه متغیر عمومی برای نگهداری شی Payment نداشته باشید شی p ئه حذف میشه و دیگه شیء اش رو ندارید.

ممنون از جوابتون
توی برنامه من به تعداد نامشخصی شی Payment ایجاد میشه که در یک لیست نگهداری میشن و باید متغییر های آنها Price قابل تغییر باشن برای همین از کلاس استفاده کردم تا هر تعداد که لازم بشه در حین اجرای برنامه ساخته بشه یا حذف بشه.
من الان از این کد توی قسمت لود فرم استفاده میکنم تا کنترلها اضافه بشن.

for (i = PaymentL.Count ; i > 0; i--)
{
PaymentL[i-1].Drowing();
this.Controls.Add(PaymentL[i-1].Name);
this.Controls.Add(PaymentL[i-1].Price);
this.Controls.Add(PaymentL[i-1].Note);
}

میخواستم بدونم راه ساده تری نیست که اینکار رو داخل خود کلاس انجام بدم؟؟؟

the king
یک شنبه 20 اسفند 1391, 23:57 عصر
ممنون از جوابتون
توی برنامه من به تعداد نامشخصی شی Payment ایجاد میشه که در یک لیست نگهداری میشن و باید متغییر های آنها Price قابل تغییر باشن برای همین از کلاس استفاده کردم تا هر تعداد که لازم بشه در حین اجرای برنامه ساخته بشه یا حذف بشه.
من الان از این کد توی قسمت لود فرم استفاده میکنم تا کنترلها اضافه بشن.

for (i = PaymentL.Count ; i > 0; i--)
{
PaymentL[i-1].Drowing();
this.Controls.Add(PaymentL[i-1].Name);
this.Controls.Add(PaymentL[i-1].Price);
this.Controls.Add(PaymentL[i-1].Note);
}

میخواستم بدونم راه ساده تری نیست که اینکار رو داخل خود کلاس انجام بدم؟؟؟

Name که نه، چون اسم مشخصه Name کنترل ها است، اما ساده اش اینه که شما یک UserControl
جدید بسازید، مثل فرمی می مونه که کادر نداره. بعد هر چی کنترل TextBox خواستید رویش بچینید
و نامگذاری شون کنید. فرضا اسم اش رو از textBox1 به Price تغییر بدهید. اون TextBox ها یک
مشخصه Modifiers دارند که از Private به Public تغییرشون دهید.

TabIndex ها رو هم همونجا موقع طراحی محتویات UserControl تون تنظیم کنید. نیازی به کد نویسی نداره.

موقعی که کدتون یکبار کامپایل شد، UserControl ای که ساخته بودید به عنوان کنترل هایی که
میشه روی فرم قرار داد بالای Toolbox اضافه میشه. هر چند تا شون که خواستید روی فرم قرار دهید
یا با کد نویسی روی فرم اضافه کنید :


UserControl1 u1 = new UserControl1();
u1.Location = new System.Drawing.Point(200, 100);
u1.Name = "Payment1";
this.Controls.Add(u1);


اسم کلاس اون UserControl تون رو هم به Payment تغییر دهید. دقت کنید که Price و Note و ... فرزند های
Payment هستند، پس نوه فرم می شوند، نه فرزند فرم :

Payment p = this.Controls["Payment1"] as Payment;
p.Price.Text = "123";
p.Note.Text = "Sample";