الأحد، 16 مارس 2014

C#: التنقل بين الفورمات مع اغلاق الفورم الأول

كيف تخترق البطاقات البنكية في دقائق، مجانًا وبدون معلم
يحدُث أن تعمل في برمجة مشروع ما، بلغة C# (السي شارب)، ثم تريد التنقل من Form1 إلى Form2، حيث تضغط على الزر المبَرمج لتنفيذ المهمة، كاتبًا كود التنقل إلى Form2 وغلق Form1:
Form2 f2 = new Form2();
f2.Show();

Form1 f1 = new Form1();
f1.Close(); // f1.Hide();

ثم تفاجؤ أن Form1، ما زال ظاهرًا بالتوازي مع Form2، رغم كتابة كود الإغلاق بطريقة منطقية.

لفهم المشكلة من الأساس، علينا فهم كيف يفكر الـIDE الذي نعمل عليه (Microsoft Visual Studio).

أثناء التنقل بين الـForms، فإن الـIDE يتعامل معهم بمنطق الأم (ParentForm) والأولاد، حيث نأمره بغلق الأم أثناء فتح الولد، وهكذا دواليك. فيُصبح كود التنقل والإغلاق الصحيح، كالتالي:
Form2 f2 = new Form2();
f2.Show();

ParentForm.Hide();

ASP.NET: حل مشكلة عدم تغير القيم في قاعدة البيانات إثر استخراجتها عن طريق Page_Load

الشفرة البرمجية، لكيفية السيطرة على العالم، عن طريق الإنترنت
قد يحدث لأحدكم أن يبرمج موقعًا أو تطبيقًا ما، بالـASP.NET، وقد تصادفه بعض المشكلات والأخطاء غير المتوقعة وغير المذكورة في كتب الشروحات.

وأنا أعمل في تطبيق ويب، مع إحدى الصديقات، صادفني خطأ، وهوَ كالتالي:

لدي صفحتان في السيرفر الخاص بي. أكتب الرقم السري الخاص بي في الصفحة الأولى، ثم أضغط على زر الارسال، للمرور للصفحة الثانية، وفي أثناء المرور، يتم نقل الرقم السري الذي أدخلته من الصفحة الأولى نحو الصفحة الثانية، باستعمال الأكواد التالية:

الصفحة 1 - كود الإرسال
Response.Redirect("Page1.aspx?code=" + code);

الصفحة 2 - كود الإستقبال - Page_Load
if (Request.QueryString["code"] != null)
            {
                int code = int.Parse(Request.QueryString["code"]);
                req = "select * from Table1 where code='" + code + "'";
                executeMyQuery(req);
            }

أرسلُ الرقم السري الخاص بي من الصفحة الأولى، إلى الصفحة الثانية، ليتم تحميل معلوماتي من قاعدة البيانات، كي يتم إظهارها في الصفحة كما بُرمِجَت، في مجموعة من الأدوات والمساحات، كالـtextBox، الـcomboBox، وغيرها. لكن حين تعديل قيمة ما في الـtextBox، ليتم تعديلها وتحديثها بالتوازي في قاعدة البيانات، فإن السيرفر يستجيب لطلب التغيير، لكنه يحتفظ بالقيمة الأصلية، تلك التي حُمِّلَت في الـPage_Load، عوض أخد التغيير الطارئ بعين الإعتبار.

لحل المشكل، عدّلت من كود الإستقبال، المتواجد في الـPage_Load، فأصبح كالتالي:
if (Request.QueryString["code"] != null)
            {
                int code = int.Parse(Request.QueryString["code"]);
                
                if(!IsPostBack)
                { req = "select * from Table1 where code='" + code + "'";
                executeMyQuery(req);
                Validate();
                }
            }

قد تبدو هذه التدوينة غريبة وغير مفهومة لأكثركم، لكني أنشرها هنا كتذكير لي أولاً، لعلاج نفس هذا المشكل إن صادفني أو صادفكم في القادم من المشاريع البرمجية.

نسيم الفجر ☁☁☁

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | تعريب وتطوير : قوالب بلوجر معربة