PDA

View Full Version : چگونه در کلاس از textbox و .. استفاده کنم؟؟



payam-source
شنبه 02 اردیبهشت 1391, 14:27 عصر
سلام دوستان اگه کسی هست بتونه به این سوالم ژاسخ بده ممنون می شم من یه فرم طراحی می کنم حالا می خوام اطلاعات این فرم رو به کلاسی کع تعریف کردم بفرستم و توی این کلاس مثلاً یه listbox تعریف کنم و اطلاعاتم توی این listbox بره و تو فرم اصلی دیده بشه
من مشکلم اینه که نمی تونم این listbox رو توی کلاس تعریف کنم در خالی که استادم با delphi هین کارو کرده بود

سوداگر
شنبه 02 اردیبهشت 1391, 14:32 عصر
فضای نام System.Windows.Forms رو باید به ابتدای فایل کلاستون اضافه کنید.

payam-source
شنبه 02 اردیبهشت 1391, 14:40 عصر
ببینید وقتی توی فرم یه textbox درست می کنیم این textbox نام داره و برای دستیابی بهش از این دستور استفداه می کنیم به طور مثالtextbox1.text یا هر متد دیگه ای ولی با اضافه کردن این دستوری که فرمودین فقط میتونیم به textbox برسیم نه نامش یا درونش
نمی دونم سوالمو متوجه شدین یا نه؟

سوداگر
شنبه 02 اردیبهشت 1391, 14:55 عصر
به خاطر اینه که کلاس TextBox به صورت استاتیک تعریف نشده و اینکه در سی شارپ، خود کلاس هیچ حافظه ای را نمی گیرد، بلکه اول باید نمونه ای از یک کلاس در یک متد ساخته شود. پس شما هم کدتون رو داخل یک متد public که در کلاستون هست قرار بدین:
public class TextBox
{
public void myFunc()
{
TextBox2 tb2 = new TextBox2();
tb2.Text = "Hello";
}
}

public class TextBox2
{
public string Text;

}

payam-source
شنبه 02 اردیبهشت 1391, 15:16 عصر
مرسی از راهنمایتون
شما امدین دوتا کلاس تعریف کردین یکی textboxو یکی هم textbox2 بعد یه متغییر توی textbox2 تعریف کردین بعد توی فانکشنتون اون کلاسو فراخونی کردین و تکسشو برابر با hello گذاشتین
با این کار اگه من این کلاس textbox که تعریف کردمو توی یه فرم خالی تعریف کنم کامپایل کنم یه textbox واسم نمایش میده که داخلش نوشته hello؟؟؟؟؟؟

gwbasic
شنبه 02 اردیبهشت 1391, 15:27 عصر
به لحاظ فنی داخل کلاس می تونید از هر type ای پراپرتی بسازید بنابراین ساختن ListBox و TextBox هم که هرکدوم یک type هستند امکان پذیر هست و فقط نکته ای که باید بهش دقت کنید اینه که این ها باید به پراپرتی Controls در فرم add شده باشند و Location آنها نیز مشخص شده باشد تا قابل نمایش باشند. فرض کنید داخل فرم یک button وجود داره که بازدن اون می خوایم از طریق کلاسی دیگر یک ListBox را در فرم نمایش دهیم. هزارویک راه زشت و اشتباه وجود داره که یکیش می تونه این باشه

MyClass cls = new MyClass();
ListBox lst = cls.GetListBox();
lst.Location = new Point(100,100);
this.Controls.add(lst);

این کد رو باید پشت رویداد کلیک button مذکور بنویسید که listbox ساخته شده توسط MyClass را به لیست کنترل های فرم اضافه می کند و در نتیجه نمایش داده می شود. کد کلاس MyClass هم به شکل زیر است:

public class MyClass
{
public ListBox GetListBox()
{
ListBox mylist = new ListNox();
mylist.Items.AddRange(new string[] {"One", "Two", "Three" });
return mylist;
}
}


شاید این کد در حد یک تمرین دانشجویی کافی باشه و می بینید که کد بدرستی کار می کنه اما آیا یک برنامه نویس حرفه ای این کار رو انجام می ده؟
اگر با مفاهیم چند لایه نویسی آشنا باشید در یک پروژه بخاطر پاره ای مسائل از جمله قابلیت نگهداری( یعنی اینکه کد طوری نوشته شود که در آینده به راحتی قابل تغییر باشد) باید وظیفه هر لایه و بصورت جزئی تر هر کلاس و متد مشخص باشد و یک کار را انجام دهد.
فرم مورد نظر ما باید داده ها رو نمایش دهد و آن کلاس هم فقط باید وظیفه پردازش داده ها را داشته باشد نه تصمیم گیری در مورد اینکه چه کنترلی بسازد برای نمایش. بنابراین فرم شما باید داده ای را به کلاس پاس دهد و نتیجه رو بگیرد و اونطور که خودش تصمیم می گیرد آن داده را نمایش دهد.
پس بهتره به این شکل عمل کنیم:

MyClass cls = new MyClass();
ListBox lst = new ListBox();
lst.DataSource = cls.GetData();
lst.Location = new Point(100,100);
this.Controls.add(lst);


public class MyClass
{
public ListBox GetListBox()
{
List<string> list =new List<string>{"One", "Two", "Three" };
return mylist;
}
}

این می تونه مقدمه ای باشه برای تقسیم وظایف در پروژه ...

موفق باشید

payam-source
شنبه 02 اردیبهشت 1391, 15:37 عصر
ممنون مرسی از راهنماییتون