المتابعون للمدونة

الثلاثاء، 22 أكتوبر 2013

3 أخطاء محتملة عند التعامل مع DateTimePicker


3 أخطاء محتملة عند التعامل مع DateTimePicker

 

عند استخدام أداة اختيار الوقت والتاريخ DateTimePicker، هذه ثلاثة أخطاء الصغيرة قد تقع فيها:

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

إذا كانت القيمة الصغرى الحالية هي 1/10/2013 والقيمة العظمى هي 31/10/2013، وأردت تغييرهما إلى 1/11/2013 و 30/11/2013 على الترتيب.. في هذه الحالة لو حاولت أن تضع القيمة الصغرى الجديدة 1/11/2013 فسيحدث خطأ في البرنامج لأنها أكبر من القيمة العظمى القديمة!.. في هذه الحالة يجب وضع القيمة العظمى أولا.. لكنك لا تستطيع اعتماد هذا الترتيب في كل الحالات، لأن القيمة العظمى الجديدة في موقف آخر قد تكون أصغر من القيمة الصغرى القديمة!

لتجنب هذه المشكلة بطريقة بسيطة وبدون الدخول في حسابات وجمل شرط، استخدم الترتيب التالي:

- لا تضع القيمة الصغرى التي تريدها مباشرة، بل ضع في الخاصية MinDate تاريخا قديما جدا، مثل 1/1/1900.

- ضع القيمة القصوى في الخاصية MaxDate.. طبيعي أنها ستكون أكبر من ذلك التاريخ القديم.

- ضع القيمة الصغرى في الخاصية MinDate.

- لاحظ أن تغيير قيمة أي من الخاصيتين MinDate و MaxDate يغير قيمة التاريخ الحالي المحدد في الأداة (الموجود في الخاصية Value)، لهذا قد تحتاج لإعادة وضع قيمة التاريخ الذي تريد عرضه في الأداة في الخاصية Value.

هذا مثال على هذه الطريقة:

DateTimePicker1.MinDate = #1/1/1900#

DateTimePicker1.MaxDate = Now.AddDays(3)

DateTimePicker1.MinDate = Now.AddDays(-3)

DateTimePicker1.Value = Now

 

2- عند استخدام Now لوضع قيم الخصائص MinDate أو MaxDate أو Value في الأداة DateTimePicker هناك احتمال أن يحدث خطأ في البرنامج.. السبب في هذا أن الأداة DateTimePicker لا تتعامل مع التاريخ فقط (السنة والشهر واليوم) بل تأخذ الوقت في اعتبارها أيضا.. ونظرا لأن استدعاء الدالة Now يعيد وقتا مختلفا في كل مرة، فإن الكود التالي سيسبب خطأ في البرنامج:

DateTimePicker1.MinDate = Now

DateTimePicker1.Value = Now

لأن الوقت العائد من Now في المرة الثانية، سيكون أكبر من القيمة العظمى!

لحل هذه المشكلة، استدع الدالة Now مرة واحدة فقط وضع ناتجها في متغير، ثم ضع قيمته في خصائص الأداة DateTimePicker:

Dim D = Now

DateTimePicker1.MinDate = D

DateTimePicker1.Value = D

 

3- نظرا لأن الأداة DateTimePicker لا تتعامل مع التاريخ فقط (السنة والشهر واليوم) بل تأخذ الوقت في اعتبارها أيضا، أنصحك عند استخدام الدالة Now في وضع قيمة أي من الخصائص (MinDate أو MaxDate أو Value) أن تتخلص من جزء الوقت لأنه قد يسبب مشاكل، ويجعل بعض التواريخ خارج النطاق المسموح به بسبب بضع ساعات أو دقائق أو حتى ثواني!

لفعل هذا، يمكنك تكوين تاريخ جديد باستخدام معلومات السنة والشهر واليوم فقط، كالتالي:

Dim FullDate = Now

ShortDate = New Date (FullDate.Year, FullDate.Month, FullDate.Day)

 

 

هناك تعليق واحد:

  1. السلام عليكم
    برنامج رائع ومشكور على المجهود
    بس كنت بتسال اذا كنت اريد ان احسب فرق الزمن بالثواني ( لحساب زمن تنفيذ دالة محددة ) ماذا استخدم

    ردحذف

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر