PDA

View Full Version : شکل دستوری foreach



AlgorithmX
جمعه 27 خرداد 1390, 18:58 عصر
سلام!
ممنون میشم هر چی در مورد حلقه foreach و نحوه کارکردش می دونید بگید!

ma.rad
جمعه 27 خرداد 1390, 19:02 عصر
مثال برای پاک کردن همزمان تکس ، تکس باکس ها

foreach (Control C in this.Controls)
if (C isTextBox)
{
C.Text="";
}

ma.rad
جمعه 27 خرداد 1390, 19:08 عصر
مثال برای بررسی تیک خوردن چند چک باکس

foreach (Control C in this.groupBox2.Controls )

if (C isCheckBox && ((CheckBox)C).Checked)
return true;

return false;

فکر کنم با این مثال ها متوجه شدی

AlgorithmX
جمعه 27 خرداد 1390, 19:09 عصر
مثال برای پاک کردن همزمان تکس ، تکس باکس ها

foreach (Control C in this.Controls)
if (C isTextBox)
{
C.Text="";
}


خوب این براساس چه چیز این حلقه رو تکرار میکنه؟

AlgorithmX
جمعه 27 خرداد 1390, 19:17 عصر
مثال برای بررسی تیک خوردن چند چک باکس

foreach (Control C in this.groupBox2.Controls )

if (C isCheckBox && ((CheckBox)C).Checked)
return true;

return false;

فکر کنم با این مثال ها متوجه شدی

یعنی میاد بین تمام کنترل ها چرخ میزنه و در یکی از دورها یه شی Checkbox میرسه و شرت شما (
if (C isCheckBox && ((CheckBox)C).Checked)) رعایت میشه!
درسته؟

ma.rad
جمعه 27 خرداد 1390, 19:17 عصر
خوب این براساس چه چیز این حلقه رو تکرار میکنه؟
این حلقه میاد و به ازای هر کنترل از نوع تکس باکس مقدار تکس اون رو خالی میکنه(فقط به تعداد اون کنترل-شی)
مثلا شما بعد از دستور insert میخواید تکس باکس ها خالی بشن وباید یکی یکی تکس اونها رو خالی کنیدولی با این دستور فقط یه بار فراخوانی همه تکس باکس ها خالی میشن

البته موارد استفاده بیشتری داره-اما بیشتر تو این زمینه استفاده میشه
اگر نیازه بیشتر توضیح بدم

ma.rad
جمعه 27 خرداد 1390, 19:21 عصر
یعنی میاد بین تمام کنترل ها چرخ میزنه و در یکی از دورها یه شی Checkbox میرسه و شرت شما (
if (C isCheckBox && ((CheckBox)C).Checked)) رعایت میشه!
درسته؟


بله-مثلا می بینه کدوما تیک خوردن مقادیر اون ها رو برمی گردونه

Felony
جمعه 27 خرداد 1390, 19:21 عصر
خوب این براساس چه چیز این حلقه رو تکرار میکنه؟
foreach یک حلقه هست که به تعداد عضوهای یک آرایه گروه یا اشیاء که بر اساس System.Collections.IEnumerable یا System.Collections.Generic.IEnumerable<T> پیاده شده اند کار میکند ، به این دلیل هم اسم اون ها Enumerable هست که قابل شمارش هستند ، اشیائی که Enumerable هستند میتونند در حلقه foreach به کار برند .

مثلا کنترل های موجود تو یک فرم Enumerable ( قابل شمارش ) هستند ، با حلقه foreach ی که در مثال پست قبل آورده شد :

foreach (Control C in this.Controls)
if (C isTextBox)
{
C.Text="";
}

حلقه به تعداد کنترل های موجود در فرم دور میزنه ، دقت کنید که در حلقه های foreach هم مثل حلقه for معمولی باید یک شمارنده داشته باشید ، با این تفاوت که شمارنده در حلقه foreach در هر دور حلقه حاوی شئ جاری از Enum مورد نظر هست پس با توجه به این موضوع باید فهمیده باشید که در تعریف شمارنده حلقه foreach نوع شمارنده با نوع Enum در حال بررسی باید یکی باشد ، همانطور که در مثال بالا نوع C با نوع Enum کنترل های موجود روی فرم ( this.Controls ) یکی هست .

پس با توجه به کد بالا حلقه به تعداد کامپوننت های موجود در فرم برنامه دور میزنه ، در هر دور بررسی میکنه ببینه شئ جاری ( در کد بالا C که شمارنده حلقه هست ) از نوع مورد نظر ( TextBox ) هست یا نه ، اگر بود اون رو خالی میکنه .

foreach در زبان های دیگه هم معادل داره ، مثلا در دلفی حلقه for ... in مانند foreach عمل میکنه که تمام توضیحات بالا در مورد اونها هم صدق میکنه .

AlgorithmX
جمعه 27 خرداد 1390, 19:33 عصر
حالا اگر بخواهم بین چند متغییر (مثلا با نام های fx1,fx2, ..) متد fxy.Number (مثلا fx2.number ) رو چک کنم که آیا برابر با یک عددی هست ، باید چی بنویسم؟

Farshid007
جمعه 27 خرداد 1390, 20:09 عصر
برای این کار می تونی از microsoft.VisualBasic.information.isNumberic استفاده کنی
(اول رفرنس microsoft.VisualBasic رو ادد کن)

mmd2009
جمعه 27 خرداد 1390, 20:09 عصر
سلام.

منظورتون چنین حالتیه ؟


List<int> intAge = new List<int>();

intAge.Add(18);

foreach (int s in intAge)
{
if (s > 20)
{
Console.WriteLine("(age>20)Age={0}", s);
}
else if(s < 20)
{
Console.WriteLine("(age<20) Age={0}", s);
}
}

Farshid007
جمعه 27 خرداد 1390, 20:13 عصر
یه مثال:
string[] myText ={"52", "32", "9855", "FFFFFF", "459", "DDDD" };
foreach (string str1 in myText)
{

if (Microsoft.VisualBasic.Information.IsNumeric(str1) )
{
MessageBox.Show(str1 + " is a Number");
//Do Somthing....
}
else
{
MessageBox.Show(str1 + " is not a Number");
}

}

AlgorithmX
جمعه 27 خرداد 1390, 20:35 عصر
حالا اگر بخواهم بین چند متغییر (مثلا با نام های fx1,fx2, ..) متد fxy.Number (مثلا fx2.number ) رو چک کنم که آیا برابر با یک عددی هست ، باید چی بنویسم؟


برای این کار می تونی از microsoft.VisualBasic.information.isNumberic استفاده کنی
(اول رفرنس microsoft.VisualBasic رو ادد کن)

داداش نخواستم چک کنم ییبینم که آیا عدد هست یا نه!!
خواستم با استفاده از حلقه foreach بین چند متغییر سویچ کنم و اون هارو با یک مقدار عددی مقایسه کنم و ببینم که آیا برابرند یانه!؟

Farshid007
جمعه 27 خرداد 1390, 20:41 عصر
خوب اینکه اسان تره:
int[] myText ={ 52, 32, 9855, 32, 33, 43 };
int fx1=33;
foreach (int fx2 in myText)
{

if (fx2==fx1)
{
MessageBox.Show(fx2 + " == " +fx1);
//Do Somthing....
}
else
{
MessageBox.Show(fx2 + " != "+fx1);
//Do Something...
}

}

Farshid007
جمعه 27 خرداد 1390, 20:43 عصر
مشکلتون حل شد
اگه حال شد
{نگفتی کموننتی که من عکساشو داده بودم از کجا اوردی
می تونی toolStrip و ContextMenustrip هم همینجوری واسم جور کنی}
با تشکر

Felony
جمعه 27 خرداد 1390, 20:45 عصر
داداش نخواستم چک کنم ییبینم که آیا عدد هست یا نه!!
خواستم با استفاده از حلقه foreach بین چند متغییر سویچ کنم و اون هارو با یک مقدار عددی مقایسه کنم و ببینم که آیا برابرند یانه!؟
به توضیحاتی که دادم دقت نکردید !
متغییرهایی که در برنامه شما تعریف شدند مگه Enum هستند که میخواین روشون حرکت کنید ؟ اگر اونها رو به صورت آرایه تعریف کنید اونوقت میشه این کار رو کرد در غیر این صورت خیر .

Farshid007
جمعه 27 خرداد 1390, 20:49 عصر
داداش نخواستم چک کنم ییبینم که آیا عدد هست یا نه!!
خواستم با استفاده از حلقه foreach بین چند متغییر سویچ کنم و اون هارو با یک مقدار عددی مقایسه کنم و ببینم که آیا برابرند یانه!؟
با حلقه for هم می تونی:
اینجوری:
int[] myText ={ 52, 32, 9855, 32, 33, 43 };
int fx1=33;
for (int index = 0; index < myText.Length; index++)
{
if (myText[index] == fx1)
{
MessageBox.Show(myText[index] + " == " + fx1);
//Do Somthing....

}
else
{
MessageBox.Show(myText[index] + " != " + fx1);
//Do Something...

}

}

AlgorithmX
جمعه 27 خرداد 1390, 21:41 عصر
توی لینک زیر می خواستم بدونم آیا میشه تو برنامه با حلقه foreach داخل متغییر custs رو جستجو کرد واگر عدد 1 وارد کنسول شد برنامه نام رو در کنسول چاپ کنه!

لینک! (http://barnamenevis.org/showthread.php?291963-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%AE%DB%8C-%DB%8C%DA%A9-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87%21&p=1283583#post1283583)