PDA

View Full Version : مشکل در ایجاد شرط foreach برای گروهی از تکست باکس ها



012132
یک شنبه 24 فروردین 1393, 17:42 عصر
من با دستور زیر برای 6 تا تکس باکس بوسیله دستور foreach یک شرط گذاشتم :


foreach (TextBox c in this.Controls.OfType<TextBox>())
{
if (c.Text == "")
{
errorProvider1.SetError(c, "مقدار را وارد نمایید !");

}
else if (c.Text != null)
{

errorProvider1.Clear();

}
else
{
c.Text = "";
}

با این دستور اگه هر کدوم از تکس باکس ها خالی باشه آیکن ارور کنارش ظاهر میشه و اگه هر کدوم از تکس باکس ها پر باشه ، علامت ارور از کنارش رد میشه . مشکل من اینه که می خوام شرط بذارم اگه همه ی تکست باکس ها پر بودن ، همشون خالی بشن .
چطور باید این کار رو تو کد بالا انجام بدم ؟؟؟؟؟

us1234
یک شنبه 24 فروردین 1393, 19:00 عصر
باید یک فلگ flag . یک فلگ اول ست میکنید با مقدار true در داخل تمام شرط ها فلگ را false کنید . بعد از آخرین شرط چک کنید فلگ هنوز true هست یا false شده . اگر فالس شده یعنی یکی از شرط ها اجرا شده که یعنی یکی از تکس باکس ها پر نشده .

behzadkhan
یک شنبه 24 فروردین 1393, 19:40 عصر
با سلام

ببین کار می کنه:
=========================================


private void button8_Click(object sender, EventArgs e)
{
var x1 = this.Controls
.OfType<TextBox>()
.Where(ctl => ctl.Text.Length==0)
.ToList();


if (!x1.Any())
{
this.Controls
.OfType<TextBox>()
.ToList()
.ForEach(txt => txt.Text = "");
}
}



با تشکر

012132
یک شنبه 24 فروردین 1393, 22:04 عصر
ممنون ولی اونطوری که می خواستم نبود .
بذارید بگم چیکار می خوام بکنم اینطوری شاید بتونید بهتر راهنماییم کند .
من یه فرم ثبت نام دارم . توش از error Provider می خوام استفاده کنم و می خوام با یک کد چک کنم که اگر تکست خالی بود ارور بده و اگه پر شد ارور برداشته بشه و اگر همه تکست ها پر بودن ، ثبت نام انجام بشه . پس اینجا 3 تا شرط داریم .
اول اینکه اگه تکستی خالی بود ارور بده ، دوم اگه همون تکست پر شد ارور برداشته بشه ، سوم اگه همه تکست ها پر بودن ، ثبت نام انجام بشه .
تو کد بالا 2 تا از شرطا برقرار میشه . روی آخریش نمی دونم چیکار کنم .
راهنماییم کنید . ممنون

aliasghar2
یک شنبه 24 فروردین 1393, 22:12 عصر
سلام
از خود errorprovider استفاده کن اگه خطایی توش موجود نباشه به معنی پر بودن تمام تکست باکس ها
در ضمن باید اینکار رو بعد از foreach انجام بدی باید حداقل یک بار تمام تکس باکس هارو چک کرده باشی
یا از linq استفاده کنی

012132
یک شنبه 24 فروردین 1393, 22:33 عصر
میشه یکم بیشتر توضیح بدی ؟ اگه میشه از کدهای پست اول استفاده کن و در قالب یک مثال به من توضیح بده .
ممنون

behzadkhan
یک شنبه 24 فروردین 1393, 22:39 عصر
با سلام

ببین اونی که می خواهی هست یا نه.

1. 6 تا تکست باکس توی فرم ایجاد کن.
2. رویداد Validating تمام تکست باکسها را برابر با رویداد Validating اولین تکست باکس کن.
3. رویداد TextChenged تمام تکست باکسها را برابر با رویداد TextChenged اولین تکست باکس کن.


ErrorProvider[] errorProvider1 = new ErrorProvider[6];

private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 6; i++)
{
errorProvider1[i] = new ErrorProvider();
}
{

private void button1_Click(object sender, EventArgs e)
{
var x1 = this.Controls
.OfType<TextBox>()
.Where(ctl => ctl.Text.Length==0)
.ToList();


if (!x1.Any())
{
this.Controls
.OfType<TextBox>()
.ToList()
.ForEach(txt => txt.Text = "");


this.errorProvider1
.ToList()
.ForEach(ep=>ep.Clear());
MessageBox.Show(".با موفقیت ثبت شد");
}
else
{


MessageBox.Show(".لطفا تمام فیلدها را پر کنید");
}
}


private void textBox1_Validating(object sender, CancelEventArgs e)
{

TextBox c = sender as TextBox;
if (c.Text == "")
{
errorProvider1[c.TabIndex].SetError(c, "مقدار را وارد نمایید !");

}
else if (c.Text != null)
{


errorProvider1[c.TabIndex].Clear();

}
else
{
c.Text = "";
}
}


private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox c = sender as TextBox;
errorProvider1[c.TabIndex].Clear();
}



با تشکر

aslan
یک شنبه 24 فروردین 1393, 23:16 عصر
سلام
foreach را داخل یک متد استفاده کنید :
قبل از foreach یک فلگ را true کن :
bool AllCorrect=true;
در else آخر هم :
c.Text="";
AllCorrect=false;
بعد از حلقه foreach اگر AllCorrect=true بود همه چیز OK هستش

012132
یک شنبه 24 فروردین 1393, 23:18 عصر
خیلی خیلی ممنون . دقیقاً همون طور که می خواستم شد .