PDA

View Full Version : سوال: آرایه کردن چند شی در C#



fazelgholi
چهارشنبه 12 خرداد 1389, 17:13 عصر
چطور میشود چند شیء مثلا چند Text box را در روی یک فرم به صورت آرایه معرفی کرد و بعد با استفاده از اندیس به هر text box دسترسی پیدا کرد و کار هایی که روی هر textbox انجام می دهند روی آنها انجام داد ؟؟؟ خواهشا pls

r00tkit
چهارشنبه 12 خرداد 1389, 17:41 عصر
یه کارایی رو می شه با Indexer انجام داد

s.khoshfekran
چهارشنبه 12 خرداد 1389, 18:22 عصر
ArrayList arr = new ArrayList();
foreach (Control c in this.Controls)
{
if(c.GetType() == typeof(TextBox))
{
arr.Add((TextBox)c);
}
}

sds1920
چهارشنبه 12 خرداد 1389, 18:31 عصر
مگه نمي شه آرايه اي از TextBox تعريف كرد.به صورت زير :


TextBox[] arrText=new TextBox[5];

اگه نشد يك آرايه ازنوع Object تعريف كن و قبل از استفاده هر عضو اونو به TextBox تبديل كن.


Object[] arrObj=new Object[5];

روش تبديل نوع

TextBox txt=(TextBox)arrObj[1]

r00tkit
چهارشنبه 12 خرداد 1389, 19:43 عصر
هیچ کدوم از جواب ها ربطی به سوال نداشت

sia_2007
چهارشنبه 12 خرداد 1389, 23:46 عصر
MessageBox.Show(IndexedTextBox(1).Text);
IndexedTextBox(2).Text = "Hello";
IndexedTextBox(0).PasswordChar = '*';

// ات مقدار بدی TextBox هر Tag برای استفاده از متد دوم؛ اول باید به خصیصه
// بعد مقدار تگ دقیقا نقش ایندکس رو به عهده میگیره

MessageBox.Show(IndexedTextBox2(1).Text);
IndexedTextBox2(2).Text = "Hello";
IndexedTextBox2(0).PasswordChar = '*';

// این هم حلقه
for (int i = 0; i < this.Controls.Count-1; i++)
{
MessageBox.Show(IndexedTextBox(i).Text);
}
}
/// <summary>
/// ها مقداردهی میشود Text Box این ایندکس در اختیار شما نیست؛ و به ترتیب نوبت ساخت
/// </summary>
/// <param name="indexPar">ایندکس مورد نظر</param>
/// <returns>TextBox</returns>
public TextBox IndexedTextBox(Int32 indexPar)
{
return this.Controls.OfType<TextBox>().Cast<TextBox>().Where((TXT, Index) => Index == indexPar).FirstOrDefault();
}
/// <summary>
/// تعیین میکنید Text Box هر Tag این ایندکس را با تعیین خصیصه
/// </summary>
/// <param name="indexerPar">ایندکس مورد نظر</param>
/// <returns>TextBox</returns>
public TextBox IndexedTextBox2(Int32 indexerPar)
{
return this.Controls.OfType<TextBox>().Cast<TextBox>().FirstOrDefault(TXT => Convert.ToInt32(TXT.Tag) == indexerPar);
}

sia_2007
چهارشنبه 12 خرداد 1389, 23:49 عصر
خیلی سادست؛ اگه از متد دوم استفاده کنی
همون طور که قبلا مینوشتیم : TextBox[2].Text = "Hello
حالا مثلا مینویسیم IndexTextBox(2).Text = "Hello
مقدار ایندکس هر Text Box رو هم با Tag ست میکنیم
مثلا میخواهیم ID با اندکس 2 دستیابی شود؛ در Tag اش مینویسیم 2
خوبه ؟

fazelgholi
پنج شنبه 13 خرداد 1389, 20:43 عصر
خیلی سادست؛ اگه از متد دوم استفاده کنی
همون طور که قبلا مینوشتیم : TextBox[2].Text = "Hello
حالا مثلا مینویسیم IndexTextBox(2).Text = "Hello
مقدار ایندکس هر Text Box رو هم با Tag ست میکنیم
مثلا میخواهیم ID با اندکس 2 دستیابی شود؛ در Tag اش مینویسیم 2
خوبه ؟
اولا فضای کاری linq برای چیست؟ در سیستم من جواب نمیدهد.
از .net 2005 استفاده می کنم .
دوما اگر ممکنه لطف کنید توضیح بدهید که tex box ها هم نام نمی توانند باشند و باید با خاصیتtag به آنها اندیس داد ولی من نتوانستم با دستورIndexTextBox(2).Text کار کنم .
اگر جواب تکمیلی دهید خیلی خیلی ممنون می شوم

fazelgholi
پنج شنبه 13 خرداد 1389, 20:50 عصر
لطفا اگه ممکنه با .NET 2005 نمونه بدهید

fazelgholi
پنج شنبه 13 خرداد 1389, 20:51 عصر
در VB انجام دادم اما در c# بلد نیستم

sia_2007
پنج شنبه 13 خرداد 1389, 22:35 عصر
دوست عزیز
چیزی به نام Net 2005. نداریم
این نسخه Viusal Studio است که 2005 است.
بدیهی است که این کد در Net 2. و Visual Studio 2005 جواب نمیدهد.
زیرا در کد از LINQ استفاده شده؛ و LINQ در Net 2. وجود ندارد.
شما هر چه زودتر به Net 4. و VS 2010 سوئیچ کنید؛ و بیهوده وقت ارزشمندتون رو روی اون IDE مضخرف صرف نکنین.
---
دوست عزیز؛ نام Text Box های شما باید نشانگر عملکردشان باشد؛ مثلا Text Box ای که نام میگیرد و یا نمایش میدهد؛ نامی مانند txtName خواهد داشت.
لزومی نداره که شما اسم Text Box هاتون رو چی میگذارید.
در واقع روش VB 6 خیلی غلط بود؛ چون خوانایی کد رو به شدت کاهش میداد.
---
یادمه روزهای اولی که VB 6 میخوندم؛ با کپی کردن کنترل Picture Box به تعداد 40 بار؛ یک بازی پیدا کردن دو به دوی عکسهای شبیه به هم ساختم.
الآن هم میشه با این کد؛ همون کار رو کرد؛ کافیست کد رو عوض کنین.
به علاوه میتوانید به کنترل هایتان هر نامی دوست داشتید بدهید.
---
و اما ؛ دیریریرینگ !!!
لزومی به تغییر کد نیست !
---
کد زیر رو ببینید ؛
کد و استفاده از اون در دو عکس + سورس کد در فایل Zip
البته این یکی رو با Net Framework 4. و #C نوشتم؛ اگه این سری خودتون رو Upgrade نکنین؛ کد بعدی رو با Net Framework 5. و VS 2012 مینویسم ! :چشمک:
---
به زودی شروع میشود : DLR Via C# 4
---

sia_2007
پنج شنبه 13 خرداد 1389, 22:40 عصر
این یکی رو فقط با Net 4. میتونی اجرا کنی
اما باور کن Upgrade کردن ارزشش رو داره.
فقط dynamic اش
فقط