ورود

View Full Version : آرایه ای کرن label



setareh69
سه شنبه 29 فروردین 1391, 22:01 عصر
سلام خسته نباشید .
ی سوال دارم چندبار مطرح کردم جوابی ندادند.اگه امکان داره کمکم کنید خیلی گیرم.ممنون
سوال:
من 5 label دارم میخوام در حلقه بزارم و هربار اسم label اضافه بشه مثل کد زیر که در vb میشه نوشت.همین کد رو برای asp.net میخوام
for i=1 to 5
a(i)=label(i).caption
next
خیلی ممنون میشم راهنمایی ام کنید.

hamid_shrk
سه شنبه 29 فروردین 1391, 22:16 عصر
این کد c# دیگه خودتون زحمت تبدیلش به VB رو بکشید :


Label label = new Label();
string[] labelText = new string[5];
for (int i = 1; i <= 5; i++)
{

label = (Label)FindControl("Label" + i);
labelText[i] = label.Text;
}

d_derakhshani
سه شنبه 29 فروردین 1391, 22:32 عصر
دوست عزيز اين روش vb ديگه در .net به هيچ وجه ساپورت نميشه. اگه تو WinForm بود روش ForEach زدن رو Container كنترل ها و با بررسي نوع آنها ميشد. اما چون ASP.Net هست اون روش به هيچ وجه جواب گو نيست.
اما يك روش نصفه نيمه هست كه مي تونه جواب گو باشه:
يك كلكسيون از نوع كنترل تعريف كنيد. بعد بايد در page_load خودتون دستي كنترل ها رو توش اضافه كنيد. بعد هرجا لازم شد روي اين كلكسيون جستجو بزنيد
مثال:

List<Control> list=new List<Control>();
>>> Page Load
list.Add(lable1);
list.Add(able2);
...

توضيح: چون در ASP.Net بعد رندر صفحه متغير ها از بين ميرن هر بار كه صفحه پست بك ميشه ليست كنترل ها دوباره ساخته ميشه(به هيچ وجه ليست رو static تعريف نكنيد چون اون وقت بين تمام كاربرها share ميشه در حالي كه هر كاربر بايد صفحه خودش رو ببينه)
پس با اين توضيحات از شرط IsPostBack! استفاده نكنيد چون در پست بك ها ليست كنترل خالي شده.
شما داريد خودتون دستي تمام كنترل ها رو اضافه مي كنيد خوب پس فايده چيه:فايده اينجاست كه شما يكبار و در يكجا اين كار رو مي كنيد در جاهاي ديگه(n بار) صرفا با يك حلقه روي ليست به تمام كنترل ها دسترسي پيدا مي كنيد اگه كنترلي اضافه شه لازم نيست بريد همجا تو كد براي اون كد اضافه كنيد.
فكر كنيد شرطي رو روي كنترل ها بررسي مي كنيد بايد به ازاي هر كنترل يك شرط بنويسيد اگه كنترلي اضافه شه بايد تمام كدها رو واسه كنترل جديد تكرار كنيد(اگه جاهاي ديگه هم نوشته باشيد ديگه بدتر) اما در اين روش صرفا فقط اون كنترل رو در ليست اضافه مي كنيد و به هيچ جا دست نمي زنيد

با توجه به كد hamid_shrk كه از FindControl استفاده كردن بايد اين توضيح رو بدم كه استفاده از FindControl در حلقه به شدت كارايي سايت رو پايين مياره. استفاده از خود شي سريع ترين روشه اما از اونجا كه شما مي خواهيد حلقه بزاريد روش گفته شده بالا ترين كارايي رو داره(و دليل اينكه چرا استفاده شد هم توضيح داده شد).

setareh69
سه شنبه 29 فروردین 1391, 23:45 عصر
ممنون از شما
حالا اگر بخوام کد زیر رو که در vb هست رو بنویسم چطوری باید بنویسم؟

for i=1 to 5
a(i)=label(i).caption
next



ان چیری که شما گفتید ایجاد label هست اما من میخوام در حلقه for یکی یکی به اسم label اضافه شه.فرض کنید من یکسری label در page دارم حالا میخوام متن داخل آنهارو در آرایه یا متغیر بریزم.اگه تعداد labelزیاد باشه مثلا 100 تا نمیتونم 100 بار در هر بار هر label را بااسمش صدا کنم .میخوام تو حلقه بندازم.وهربار اسم labelام یکی یکی زیاد بشه.
بازم ممنون

aminghaderi
چهارشنبه 30 فروردین 1391, 03:49 صبح
آرایه ای کرن label


دوست من درسته برنامه نویس قوی برنامه نویسی هست که توانایی شبیه سازی و تولید انواع حالات کد را داشته باشه ولی چیزی که از همه مهمتر است انتخاب بهترین الگریتم برای توسعه هست.(قبول دارید؟)
حالا غیر از این راه ، راه دیگری برای ادامه کار وجود ندارد که شما لیبل ها رو داخل آرایه نگذارید؟؟
اگر روشی دیگری ندارید کاری که می خواهید انجام دهید رو بگید شاید راه بهتری پیدا شد.
برنامه تحت وب با برنامه رومیزی همه چیزش فرق می کند و اینجا داستان چیز دیگری می شود ، برای مثال اونجا اگر صرف به کار با ارایه ها هست ، اینجا صرف با کوتاه سازی پروسه هست.