PDA

View Full Version : کار با تعدادی Object خاص



فاطمه هاشمیان
دوشنبه 02 خرداد 1384, 17:39 عصر
من یه فرم برفرض شامل 20 تا Object دارم میخوام وقتی Event خاصی رخداد ,Property Text از Objectهای برفرض 10 تا 15 یک مقدار خاصی قرار داده بشه اما هر دفعه(مثلا") Objectهای 10 تا 15 رو یکی نمیگیره و هر سری Objectهای انتخابی فرق دارند ممنون میشم راهنمایی کنید من باید به چه صورت عمل کنم اگر باید از آرایه استفاده کنم Objectهارو چه جوری داخل آرایه قرار بدم

فاطمه هاشمیان
دوشنبه 02 خرداد 1384, 23:48 عصر
کسی نمیدونه لطفا" اگر میدونید راهنمایی کنید :گیج:

md_bluelily
سه شنبه 03 خرداد 1384, 00:22 صبح
میشه کمی بیشتر توضیح بدبد.
اگر ممکنه یک مثال بگذارید.

:موفق:

small_programmer
سه شنبه 03 خرداد 1384, 05:06 صبح
کلاس ArrayList چطور است؟
امتحان کرده اید؟

فاطمه هاشمیان
سه شنبه 03 خرداد 1384, 08:44 صبح
به طور مثال من 20 تا Label دارم و یک Button که با هر دفعه Click کردن این Button یکی از اعداد 1 تا 5 وارد یک متغیری به نام X میشود حالا من میخوام اگر X عدد1 بود یه متن خاصی توی Label های 2 تا 16 قرار بگیرد اگر X مقدارش 2 بود این متن توی Label های 3 تا 17 نشان داده بشه اگر X مقدار 3 داشت این متن توی Label های 4 تا 18 نشان داده بشه و بهمین ترتیب . اما من از شماره Control ها در فرم استفاده کردم (This.Controls) اما به طور مثال Label های 3 تا 17 اگر دفعه اول ...,Label1 ,Label2,Label3,Label4 است دفعه دوم ...,Label3,Label7,Label6,Label5 انتخاب میشود و هر دفعه Label های انتخابی 3 تا 17 فرق دارند :گیج:
برای حل این مشکل باید چیکار کنم که هر دفعه Object های انتخابی تغییر نکنند

فاطمه هاشمیان
سه شنبه 03 خرداد 1384, 08:46 صبح
کلاس ArrayList چطور است؟
چه جوری کنترلها رو در آرایه قرار بدم؟
ممنون میشم بیشتر توضیح بدید

فاطمه هاشمیان
سه شنبه 03 خرداد 1384, 11:00 صبح
خیلی فوری لطفا" راهنمایی کنید :cry: :گیج:

small_programmer
چهارشنبه 04 خرداد 1384, 05:03 صبح
یک شی از کلاس ArrayList بساز و سپس با استفاده از متد Add آن که متغییر هایی از نوع Object می گیرد کنترل هایت را به اضافه کن و با [] مانند آرایه به اشیاء خود دسترسی داری.
امیدوارم این روش کمک کند
:موفق:

فاطمه هاشمیان
چهارشنبه 04 خرداد 1384, 08:27 صبح
من منظورم رو بد بیان کردم استفاده از ArrayList رو میدونم :oops: اما
من برای اینکه 3 تا Button را در آرایه قرار بدم از این دستور استفاده میکنم

ArrayList list = new ArrayList();
list.Add(this.button1);
list.Add(this.button2);
list.Add(this.button3);
و برای خواندن آنها از آرایه از این دستور

for(int counter = 0;counter < list.Count;counter++)
MessageBox.Show(((Button)(list[counter])).Text);
اما اضافه کردن 50 تا Control به آرایه با دستور Add کار منطقی نیست باید راه دیگری هم وجود داشته باشد ممنون میشم اگر من را راهنمایی کنید از توجه شما ممنونم :)

saffari2005
چهارشنبه 04 خرداد 1384, 17:35 عصر
دوست عزیز لازم نیست تک تک button ها رو add کنی. کافیه button ها رو همین جا توی کد new کنی. لذا از ابتدا میتونی یه آرایه از button ها یا هر کنترل دیگری داشته باشی و آنها را new کنی و بعد به راحتی با اندیس هاشون کار کنی. :sunglass:

فاطمه هاشمیان
چهارشنبه 04 خرداد 1384, 19:34 عصر
این Button ها باید از قبل باشه من نمیخوام اینجا New کنم و راجع به اینکه آرایه ای از Control ها ایجاد کنم و با اندیس Control ها کار کنم (توی Vb6 بود و خود کنترلها نامشان یکی بود آرایه می شدند و با اندیسهاشون می شد کار کرد اما اینجا من نمیدونم باید چه جوری این کار را کرد) ممنون میشم اگر منظورتون رو با کد بیان کنید ؟

saffari2005
پنج شنبه 05 خرداد 1384, 08:30 صبح
Label[ ] LabelArray;
LabelArray = new Label[ 20 ]; // for 20 label
for ( int index = 0; index < 20; index++ )
LabelArray[ index ] = new Label();

و به همین ترتیب می تونید به سایر property ها دسترسی داشته باشی.
:sunglass:

فاطمه هاشمیان
پنج شنبه 05 خرداد 1384, 13:00 عصر
ابتدا از راهنمائیتون ممنونم
در این حالت باید شماره تمام Label ها پشت سز هم باشد یعنی Label1 , Label2 , ...,Label19,Label20 درسته؟
حالا اگر Label ها پشت سر هم نبود چی؟یعنی label هایی که در نظر دارم Label1 ,Label2 ,Label34,Label33,Label35 و به این صورت باشد
با تشکر

small_programmer
جمعه 06 خرداد 1384, 12:47 عصر
کد زیر را برای اینکار نوشتم




private void setControlsText(ContainerControl form,Type controlType,string namePrefix,int from,int to,string valueToSet)
{
SortedList st1=new SortedList();
foreach(Control control in form.Controls)
{
if(control.GetType()==controlType)
{
st1.Add(control.Name,control);
}
}

for(int i=from;i<=to;i++)
{
if(st1[namePrefix+i.ToString()] as Control !=null)
{
((Control)st1[namePrefix+i.ToString()]).Text=value ToSet;
}
}

}
تابع setControlsText چند پارامتر می گیرد که:
اولی همان فرم یا هر ContainerControl دیگری است
دومی نوع کنترل است (برای مشکل شما (typeof(Label )
سومی نام پیشوند کنترلهاست (label)
چهارمی و پنجمی از شماره این تا شماره این است
ششمی هم مقداری است که باید برای Text ست شود.

البته با در نظر گرفتن این مطلب که نام کنترل های شما به ترتیب اعداد باشد.

مثال :


private void button2_Click(object sender, System.EventArgs e)
{
setControlsText(this,label1.GetType()/*or typeof(Label)*/,"label",2,5,"hello");
}

امیدوارم مفید باشد
:موفق:

saffari2005
شنبه 07 خرداد 1384, 12:13 عصر
من مت
حالا اگر Label ها پشت سر هم نبود چی؟یعنی label هایی که در نظر دارم Label1 ,Label2 ,Label34,Label33,Label35 و به این صورت باشد
من متوجه منظورتون نمی شم ! شما می خواهین با label کار کنین و بهش دسترسی داشته باشین , پس این شماره ها که میگین چیه؟!! :sunglass:

فاطمه هاشمیان
شنبه 07 خرداد 1384, 16:28 عصر
شما می خواهین با label کار کنین و بهش دسترسی داشته باشین , پس این شماره ها که میگین چیه؟!!
من میخوام Text را Set کنم اما در بعضی Label های فرم خوب باید Label ها از هم مجزا بشوند و بتونم از رو شمارشون بدونم در چه Label چه Text را باید قرار بدم
مثل اینکه چاره ای نیست ترتیب شماره ها باید باشه :wink:
از کدهایی که فرستادید بسیار ممنونم . حل شد :)