منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[مثال] استخدام TryParse لمدخلات اكثر امانا - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم امثلة ومشاريع VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=188)
+--- الموضوع : [مثال] استخدام TryParse لمدخلات اكثر امانا (/showthread.php?tid=36426)



استخدام TryParse لمدخلات اكثر امانا - Anas Mahmoud - 16-09-20

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

تقديم هام:

واحدة من اكبر المميزات والعيوب في نفس الوقت في لغة VB.NET انها سلسة للغاية في ما يتعلق بالتحويل بين انواع البيانات

مثلا يمكنك تعريف متغير من نوع Integer واسناد قيمة له من نوع String وستقبل اللغة هذا السلوك اثناء كتابة الكود ، واثناء التنفيذ تقوم بالتحويل المناسب لجعله Integer اذا امكن ،

الكود التالي مقبول تماما بالنسبة ل VB.NET 

كود :
       Dim i As Integer = "3"
       Dim iAsString As String = 3    
        Dim d As Date = "9/16/2020"

وهو شيء جميل ، ولكنه في غاية الخطورة لسببان رئيسيان :

السبب الاول : هو انه ايضا سيقبل الكود التالي اثناء كتابته ، ولكن عند التنفيذ سينفجر البرنامج في وجهك :

كود :
       Dim i As Integer = "3 Times"
       Dim d As Date = "9/16/2020 الاربعاء"

السبب الثاني : هو انك ستعتاد على مثل هذه السهولة ولن تحصن متغيراتك من مدخلات المستخدم ، بل الاصعب انك لن تكون واعي بعملية التحويل التي تقوم بها اللغة من string الى اي كان نوع متغيرك ، ستعتاد كتابة مثل هذه الاسطر وهذه كارثة :

كود :
       Dim i As Integer = txtMessageTimes.Text
       Dim d As Date = txtDate.Text

الان نحن نعول على المستخدم ان يدخل صيغ صحيحة والا انهار البرنامج ، وهنا تأتي اهمية TryParse .

TryParse:

حسنا الان عرفنا انه يجب علينا تحويل النصوص قبل استخدامها في المتغيرات ، واحده من الطرق التي تقوم بذلك هي w[Type].Parseتدخل لها String وتخرج النوع الذي تريده ، ولكن استخدام Parse لن يحل المشكلة ايضا ، لانها ترمي باستثناء اذا كانت الصيغة غير مناسبة ، الحل مع TryParse

الدالة TryParse تقبل مدخلين : 

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

وتعود بقيمة منطقية Boolean تمثل هل نجحت عملية التحويل ام لا

السطر التالي سيعود بقيمة False لان عملية التحويل لم تنجح لان النص غير صالح

كود :
       Dim i As Integer
       MsgBox(Integer.TryParse("3 Times", i)) 'False


ممتاز ، من الان لنعتاد على ان نستخدم TryParse كلما اردنا ان نأخد مدخلات من المستخدم :

كود :
       Dim d As Date

       If Date.TryParse(txtDate.Text, d) = False Then
           MsgBox("صيغة التاريخ غير صحيحة")
           Return
       End If

       DateTimePicker1.Value = d


هذه المقالة مهمة جدا للاستاذ Sajad بارك الله له عن نفس الموضوع
المثال التالي به اكثر من تطبيق على TryParse.


RE: استخدام TryParse لمدخلات اكثر امانا - عبد الهادي بهاب - 16-09-20

مشكور استاذ على كل ما تقدمه

لماذا لا يقبل الراقام العشرية  مثلا 3.265 او 15.25  فهو ذائما يظهر الرسالة
MsgBox("صيغة الرقم الاول غير صحيحة")




الباقي يعمل بشكل ممتاز


RE: استخدام TryParse لمدخلات اكثر امانا - Anas Mahmoud - 17-09-20

تعمل عندي بشكل طبيعي ، ربما كانت الاعدادات عندك مختلفة 

[attachment=25711]


تحقق من اعدادات النقطة العشرية

[attachment=25712]