تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[C#.NET] التحقق من المدخلات النصية Textbox Validation - لبرنامج أكثر امانا
#2
Exclamation 
طيب الآن ما الخطوة التالية ؟

لاحظنا ان عملية اضافة احداث التحقق للمدخلات النصية والتعامل معها تتم بنفس الطريقة لمربعين النص تقريبا ، مع اختلاف شرط التحقق والرسالة التي تظهر للمستخدم ، 

تخيل ان عندك 5 مربعات نصية للمدخلات ( اسم ورقم تليفون وبريد الكتروني وقيمة المرتب وتاريخ التسجيل)  ، فان مطالب لكل مربع نص ان تضيف احداث validating و validated التي تقوم بنفس الشيء :

في البداية تتحقق من ان المدخل يوافق الشرط المعطى ، والا تلغي العملية وترسل رسالة خطأ ، واذا تم التحقق تكمل العملية وتمسح رسالة الخطأ


كود :
       private void txtName_Validating(object sender, CancelEventArgs e)
       {
           var txt = (TextBox)sender;
           if (txt.Text.Trim().Length<2)
           {
               e.Cancel = true;
               errorProvider1.SetError(txt, "الاسم لايمكن ان يكون اقل من حرفين");
           }
       }

        private void txtName_Validated(object sender, EventArgs e)
        {
            var txt = (TextBox)sender;
            errorProvider1.SetError(txt,"");
        }

من غير المنطقي ان نكرر الكود كل مرة نضيف فيها مربع نص جديد ، انا شخصيا اكره تكرار الاكواد

ماذا اذا قمنا بتعريف اجراء عام لاي مربع نص يضيف هذه الاحداث ، ونخبره فقط بالشرط والرسالة ؟ فكره جيدة اليس كذلك ؟


كود :
       void AddValidation (TextBox textBox,Func<string,bool> validationChecker, string errorMsg)
       {
           textBox.Validating +=(s,e)=>
           {
               var txt = (TextBox)s;
               if (!validationChecker(txt.Text))
               {
                   e.Cancel = true;
                   errorProvider1.SetError(txt, errorMsg);
               }
           };

           textBox.Validated += (s, e) =>
           {
               var txt = (TextBox)s;
               errorProvider1.SetError(txt, "");
           };
       }


الاجراء يأخذ ثلاث مدخلات :
  1. مربع النص المراد اضافة احداث التحقق له
  2. دالة تمثل الشرط الذي يتم بناء عليه التحقق ( دالة عادية مدخلها string وتخرج bool ، او تعبير لمدا )
  3. رسالة الخطأ التي ستظهر في حالة عدم صلاحية البيانات
داخل الاجراء قمنا باضافة الاحداث كما في المشاركة الاولى في الموضوع باستخدام اضافة الاحداث اثناء التشغيل باستخدام تعابير لمدا

الان كل ما علينا فعله لاضافة احداث تحقق لاي مربع نص هو كتابة سطر واحد في المشيد او في حدث اللود للفورم :

للتحقق من الاسم اكبر من حرفين :
كود :
           AddValidation(txtName, x => x.Length >= 2, "الاسم لايمكن ان يكون اقل من حرفين");
 
للتحقق من البريد الالكتروني :

كود :
           AddValidation(txtEmail, x => Regex.IsMatch(x, @"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$"), "صيغة بريد الكتروني غير صالحة");

للتحقق من قيمة رقم عشري :
كود :
           AddValidation(txtSalary, x => double.TryParse(x,out double d), "الرقم غير صالح");

وهكذا كلما اردت اضافة مربع نص اضف له سطر التحقق 
ويبقى استخدام ValidateChildren() كما هو ،
المثال بعد التعديل في المرفقات


الملفات المرفقة
.zip   ValidatingTextbox 2.zip (الحجم : 44.02 ك ب / التحميلات : 29)
الرد }}}


الردود في هذا الموضوع
RE: التحقق من المدخلات النصية Textbox Validation - لبرنامج أكثر امانا - بواسطة Anas Mahmoud - 23-08-20, 09:55 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  (كنز المبرمجين ) أكثر مواضيع البرمجة مشاهدة وتفاعل لعام 2022 x32x01 0 2,458 30-06-22, 10:00 PM
آخر رد: x32x01

التنقل السريع :


يقوم بقرائة الموضوع: