PDA

View Full Version : دسترسی به Property های شی ایجاد شده



mehdi5106
شنبه 05 دی 1388, 16:37 عصر
بر روی فرم چندین شی ایجاد شده است.حال می خواهم با استفاده از یک button مقدار یک شی ایجاد شده که textbox می باشد را تغییر دهم. چگونه می توانم چنین کاری انجام دهم و نام شی مورد نظر را در زمان اجرا بدست آورم.


ضمنا شی ها در هر بار اجرا احتمال تغییر دارند (ممکن است تعدادشان تغییر کند).پس باید در زمان اجرا نام یک شی را بر گردانم.

Rejnev
شنبه 05 دی 1388, 18:25 عصر
سوال یکم گنگه
به هر حال باید اسم کنترل رو داشته باشی
یا اگه میخوای اسم رو بدست بیاری باید ایندکس رو داشته باشی
کنترلهای روی فرم به صورت یک collection هستن مثلا



Controls[0].Name


نام کنترل اول در مجموعه کنترلهای روی فرم رو برمیگردونه.
یا



Controls[0].Text="ali";


تکست کنترل اول رو تغییر میده.
بجای اندیس میتونید نام کنترل رو بصورت رشته بدید مثل



Controls["txt1"].Text = "ali";

mehdi5106
شنبه 05 دی 1388, 18:47 عصر
اجازه بدین بیشتر توضیح بدم:
فرض کنید روی یک فرم چندین TextBox در زمان اجرا ایجاد شده است.از قبل یک Button هم روی فرم وجود دارد.حال می خواهم با کلیک بر روی Button مقدار تکست TextBoxی که مکان نما در آن وجود دارد برابر مقدار Text کلید مورد نظر باشد.
امیدوارم تونسته باشم توضیح کاملی بدم.

Rejnev
شنبه 05 دی 1388, 19:06 عصر
حالا شد



if(ActiveControl.getType()==typeof(TextBox))
{
ActiveControl.Text="anything you want"
}

shahab_ss
شنبه 05 دی 1388, 20:26 عصر
if(ActiveControl.getType()==typeof(TextBox))
{
ActiveControl.Text="anything you want"
}
همونطوری که دوستمون گفنتد ، البته به این صورت هم میشه :

if (ActiveControl != null && ActiveControl is TextBox)
ActiveControl.Text = "your text comes here...";

به این صورت هم میتونید به هر کنترلی که مورد نظرتون هست دسترسی داشته باشید :


foreach (Control item in this.Controls)
{
if (item is TextBox)
item.Text = "blah blah blaah";
}

mehdi5106
شنبه 05 دی 1388, 21:31 عصر
شرمنده آقای باقرانی:
تو برنامه زیر که جواب نداد

shahab_ss
شنبه 05 دی 1388, 21:37 عصر
دوست عزیز ، زمانی که شما روی Button1 کلیک میکنید ActiveControl در واقع همون Button1 میشه در اینصورت شرط شما بصورت زیر هرگز True نمیشه !

private void button1_Click(object sender, EventArgs e)
{
if (ActiveControl.GetType() == typeof(TextBox))
ActiveControl.Text = button1.Text;
}

shahab_ss
شنبه 05 دی 1388, 21:43 عصر
کد شما رو کمی تغییر دادم،
امیدوارم که مشکل حل شده باشه .

mehdi5106
شنبه 05 دی 1388, 21:54 عصر
آقا شهاب بابت برنامه ممنون اما این کد شما فقط زمانی جوابگو هست که اشیا در زماتن Design ایجاد شده باشند.
اگر یک TextBox در زمان اجرا ایجاد کنیم , خروجی ندارم

Rejnev
شنبه 05 دی 1388, 22:05 عصر
آقا شهاب بابت برنامه ممنون اما این کد شما فقط زمانی جوابگو هست که اشیا در زماتن Design ایجاد شده باشند.
اگر یک TextBox در زمان اجرا ایجاد کنیم , خروجی ندارم
بایستی برای اشیائی که ایجاد میکنید در هنگام اجرا event اضافه کنید
پست زیر رو ببینید

http://www.barnamenevis.org/forum/showthread.php?t=171604

shahab_ss
شنبه 05 دی 1388, 22:09 عصر
بایستی برای اشیائی که ایجاد میکنید در هنگام اجرا event اضافه کنید
به اینصورت