PDA

View Full Version : سوال: نمایش و پاک کردن errorProvider در عمل ثبت



Iran58
چهارشنبه 19 فروردین 1394, 16:17 عصر
سلام
می خواهم 10تا textboxرا ثبت اطلاعات کنم وبرای هر textbox یک errorProvider قرار داده ام اما می خواهم قبل از ثبت هر textbox که خالی بود ارور را نمایش بدهد واگر هیچ ارور وجود نداشت عمل ثبت انجام شود
راه خود این است که برای هرtextbox یک if بنویسم اما نمی خواهم از این روش استفاده کنم آیا راه دیگری وجود دارد؟
باسپاس

am_al_59
چهارشنبه 19 فروردین 1394, 16:20 عصر
از کامپوننت هایی مثل Telerik هم میتونی استفاده کنی ابزارهایی مخصوص دارند و کل TextBox هاتو بصورت گروهی میتونی چک کنی مثل ASP

khokhan
چهارشنبه 19 فروردین 1394, 16:49 عصر
سلام
می خواهم 10تا textboxرا ثبت اطلاعات کنم وبرای هر textbox یک errorProvider قرار داده ام اما می خواهم قبل از ثبت هر textbox که خالی بود ارور را نمایش بدهد واگر هیچ ارور وجود نداشت عمل ثبت انجام شود
راه خود این است که برای هرtextbox یک if بنویسم اما نمی خواهم از این روش استفاده کنم آیا راه دیگری وجود دارد؟
باسپاس:لبخند:
1 . چک کردن همه کادرهای متن با حلقه :


var boxes = Controls.OfType<TextBox>();
وبعد


foreach (var box in boxes)
{
if (string.IsNullOrWhiteSpace(box.Text))
{
errorProvider1.SetError(box, "پر کن خالی مونده");
}
}

2 . یه راه دیگه اینکه :

var controls = new [] { tx1, tx2. ...., txt10 };
foreach(var control in controls.Where(e => String.IsNullOrEmpty(e.Text))
{
errorProvider1.SetError(control, "همشونو پر کن");
}

3 .راه سوم هم دال بر اینه که کدها تون رو در رویداد Validating یکی از کادرهای متن قرار بدی و همون رو یداد رو در مابقی متناظر با رویداد اولی قرار بدی

4 . واپسینش اینه که :


public Form1()
{
InitializeComponent();
textBox1.Validated += new EventHandler(textBox_Validated);
textBox2.Validated += new EventHandler(textBox_Validated);
textBox3.Validated += new EventHandler(textBox_Validated);
...
textBox10.Validated += new EventHandler(textBox_Validated);
}

private void button1_Click(object sender, EventArgs e)
{
this.ValidateChildren();
}

public void textBox_Validated(object sender, EventArgs e)
{
var tb = (TextBox)sender;
if(string.IsNullOrEmpty(tb.Text))
{
errorProvider1.SetError(tb, "یه خورده بیشتر دقت کن");
}
}

5 . ........ یه راه بهتر هم این که بیای یه کادر متن سفارشی برای خودت درست کنی و همه پیش بینی ها رو توی اون به سلیقه خودت انجام بدی
و در تمام پروژه تون ازش استفاده کنی ......... یه چیزی مثل این:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public class MYTextBox : TextBox
{
private string previousText = "";
private ErrorProvider ep = new ErrorProvider();

protected override void OnTextChanged(System.EventArgs e)
{
int result = 0;
if (!(int.TryParse(base.Text, out result)) && base.Text != "")
{
base.Text = previousText;
ep.SetError(this, "فقط عدد وارد کن");
}
else
{
previousText = base.Text;
ep.Clear();
}
base.OnTextChanged(e);
}

}
}


.................... والی ما شا الله