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)
السلام عليكم
ردحذفبرنامج رائع ومشكور على المجهود
بس كنت بتسال اذا كنت اريد ان احسب فرق الزمن بالثواني ( لحساب زمن تنفيذ دالة محددة ) ماذا استخدم