PDA

View Full Version : سوال: چک کردن خالی بودن TextBoxها



sajjad_spook
دوشنبه 26 خرداد 1393, 21:12 عصر
سلام دوستان عزیز . چطور میشه یه متد نوشت که خالی بودن مثلا 15 تا تکست باکس رو هنگام ورود اطلاعات چک کنه وبرای هر کدوم پیغام خودشو بده. نمیخوام از دستور IF تو در تو و پشت سر با عملگر( OR , And ) استفاده کنم. امکانش هست بصورت بولین باشه؟
:متفکر:

c0mmander
سه شنبه 27 خرداد 1393, 02:23 صبح
تمام اون چیزی که باید بگم رو داخل این کد میزارم:


TextBox[] tex = new TextBox[4];
tex[0] = textBox1;
tex[2] = textBox2;
tex[3] = textBox3;
tex[4] = textBox4;
for (int i = 0; i < 5; i++)
{
if (tex[i].Text == null) MessageBox.Show("TEXT " + (i + 1).ToString() + "is null");
}

aliagamon
سه شنبه 27 خرداد 1393, 02:49 صبح
بهتر از کد بالا اینه که بزارین همه تکست باکس هایی که نیاز به چک شدن دارن رو بزارین تو یه پنل (اصولی هم همینه که فرم های با 15 تکست باکس رو دسته بندی کرد با پنل)...
بعد بیاین با یه foreach بگردین همین :

foreach (Control control in panel1.Controls)
{
if (control is TextBox)
{
if ((control as TextBox).Text == "")
{
MessageBox.Show("Error");
}
}
}

c0mmander
سه شنبه 27 خرداد 1393, 03:04 صبح
برای هر کدوم پیغام خودشو بده. اگر داخل اون پنل کنترل های دیگه هم باشن یا امکانش هست که بشه برای هر تکس باکس یک پیغام جدا نمایش داد؟

aliagamon
سه شنبه 27 خرداد 1393, 04:57 صبح
اگه کنترل دیگه باشه که مشکلی پیش نمیاد این کد چک میکنه اگه تکست باکس بود چک میکنه ...
برای پیام اختصاصی هر تکست باکس ، برای پیام اختصاصی روش شما هم درست جواب نمیده بهترین روش برای پیام اختصاصی اینه که از کنترل ارث ببریم . یک تکست باکس اختصاصی بسازین که property برای پیام اختصاصی داشته باشه که این بیاد اونو نمایش بده ...
روش دیگه هم میتون این باشه که (این تو فارسی یکم مشکل داریم باش چون اسم نمیتونه فارسی باشه ) name رو برگردونه و بگه تکست باکس (اسمش ) خالیه ...

c0mmander
سه شنبه 27 خرداد 1393, 05:47 صبح
منظور من همون بود که با کد بالا نمیشه یک پیغام اختصاصی برای هر کدودم از تکس فیلد های خالی در نظر گرفت. با کد من میشه بترتیب برای هرکدوم یک پیغام اختصاصی نوشت (دیگه حتما باید یک بار این پیغام اختصاصی برای هر کدوم از تکس باکس ها نوشته بشه )

میشه با خاصیت name هم نام اون رو تعیین کرد و دیگه از ترتیب هم استفاده نکرد. مثل tex[i].name= .. در کل به نظرم خودم میزان کد نویسی و خوانایی برنامه این جوری بالاتر میره تا از ControlCollection بخواد استفاده بشه.

داخل پنل هم اگر قبل از هر تکس باس یک لیبل داشته باشیم میتونیم بدون ارث بری میشه به نوع تکس باکس رسید.

پ.ن. : برای خودمم هم جالبه شده که بدونم کدوم از نظر فنی بهتره...

mthreat.info
سه شنبه 27 خرداد 1393, 06:58 صبح
منظور من همون بود که با کد بالا نمیشه یک پیغام اختصاصی برای هر کدودم از تکس فیلد های خالی در نظر گرفت. با کد من میشه بترتیب برای هرکدوم یک پیغام اختصاصی نوشت (دیگه حتما باید یک بار این پیغام اختصاصی برای هر کدوم از تکس باکس ها نوشته بشه )

میشه با خاصیت name هم نام اون رو تعیین کرد و دیگه از ترتیب هم استفاده نکرد. مثل tex[i].name= .. در کل به نظرم خودم میزان کد نویسی و خوانایی برنامه این جوری بالاتر میره تا از ControlCollection بخواد استفاده بشه.

داخل پنل هم اگر قبل از هر تکس باس یک لیبل داشته باشیم میتونیم بدون ارث بری میشه به نوع تکس باکس رسید.

پ.ن. : برای خودمم هم جالبه شده که بدونم کدوم از نظر فنی بهتره...
سلام ، ببینید اگه ما تا فردا بگیم این طوری هست یا اونطوری خوب درک نمیشه !!!
خودتون تست کنید
یه فرم با 1925 تا تکست باکس اول با روش خودتون پیش برید اگه تونستید تمام تکس ها رو دستی به آرایه بدید حرفی نیست ولی فقط کد هایی رو که میزارم کپی و پیست کنید با هر تعداد تکس که دوست دارید با هر نام و هر نوع تگی فقط باید نوع تکس شما مشخص باشه ( منظور کامپوننت استفاده شده )
foreach (var item in this.Controls) {
if (item is TextBox)
{
if (string.IsNullOrEmpty((item as TextBox).Text))
{
(item as TextBox).BackColor = Color.Red;
}
}
}
یا
for (int i = 0; i < this.Controls.Count; i++) {
if (Controls[i] is TextBox)
{
if (string.IsNullOrEmpty((Controls[i] as TextBox).Text))
{
(Controls[i] as TextBox).BackColor = Color.Red;
}
}
}
حالا فکر کنم متوجه ی روش شی گرایی شدید!

sajjad_spook
سه شنبه 27 خرداد 1393, 10:04 صبح
تشکر ولی میخواستم پیغام مربوط به همون تکست باکس مشخص نمایش داده بشه نه اینکه BackColor = Color.Red قرمز بشه.
استفاده از آرایه تکست باکس در کامنت اول برای تعداد بالای تکست باکس زیاد منطقی نیست.ولی با این حال ممنون از کمکتون.:افسرده:

nunegandom
سه شنبه 27 خرداد 1393, 10:51 صبح
میتونی از اینم استفاده کنی



public static void CheckNullOrEmpty(this TextBox _mytxt)
{
if (string.IsNullOrEmpty(_mytxt.Text))
{
MessageBox.Show(_mytxt.Tag.ToString());
return;
}
}


اینجوریه که یه تکست باکس بهش میدین چک میکنه خالیه یا نه
اگه خالی بود یک مسیج بفرسته
که البته من اینجا برای مسیج به tag رجوع کردم

mthreat.info
سه شنبه 27 خرداد 1393, 12:03 عصر
تشکر ولی میخواستم پیغام مربوط به همون تکست باکس مشخص نمایش داده بشه نه اینکه BackColor = Color.Red قرمز بشه.
استفاده از آرایه تکست باکس در کامنت اول برای تعداد بالای تکست باکس زیاد منطقی نیست.ولی با این حال ممنون از کمکتون.:افسرده:
شما هر مدیریتی که روی تکس باکس دارید میتونید روی این شی ها هم داشته باشید حالا میخواد
BackColor باشه یا نام یا تگ یا ریختن متن دلخوان از اینجا به بعد بسته به سلیغه ی شماست