27-03-14, 06:10 PM
السلام عليكم...
عند توفير طريقة للمستخدم لاختيار تاريخ فإننا غالباً ما نستخدم المكون DateTimePicker الذي مصمم خصيصاً لهذا الأمر، و ذلك يكون كافياً في أغلب الأحيان.
مشكلة المكون DateTimePicker أنه لا يمكن جعله فارغاً للدلالة على عدم وجود تاريخ (مثلاً حقل تاريخ في قاعدة بيانات و قيمته NULL). هناك طريقتان للدلالة على عدم وجود تاريخ (أو إهمال التاريخ في الواقع) في المكون DateTimePicker:
1. باستخدام الـ CheckBox المدمج معه (بضبط الخاصية ShowCheckBox على True لإظهار الـ CheckBox المدمج) و ضبط الخاصية Checked على False للدلالة على إهمال التاريخ (سيظهر التاريخ باهتاً لكنه لا يختفي).
2. بضبط الخاصية Format على Custom و ضبط الخاصية CustomFormat على فراغ واحد " " فيختفي التاريخ من الـ DateTimePicker (طبعاً في العرض فقط و ليس كقيمة) للدلالة على على عدم وجود تاريخ!
* بدلاً من ذلك يمكننا استعمال مربع نص (TextBox) و زر (Button) أمامه، و تقويم شهري (MonthCalendar). في هذه الحالة يمكننا جعل مربع النص فارغاً بالفعل عند عدم وجود تاريخ.
أ. اضبط الخاصية ReadOnly لمربع النص على True لمنع الكتابة فيها بشكل مباشر.
ب. المهم بالنسبة إلى المكون MonthCalendare هو ضبط الخاصية MaxSelectionCount على 1 لمنع تحديد نطاق يضم أكثر من يوم واحد (المكون يسمح بشكل افتراضي بتحديد نطاق يضم 7 أيام).
ج. نستعمل الأكواد التالية:
* بالنسبة إلى الحدث الأخير (KeyDown) لمربع النص فهو لمحاكاة عمل الـ DateTimePicker و الـ ComboBox حيث عند ضغط المفتاح F4 يتم فتح المكون للسماح للمستخدم بالاختيار.
نرجو الاستفادة و السلام.
عند توفير طريقة للمستخدم لاختيار تاريخ فإننا غالباً ما نستخدم المكون DateTimePicker الذي مصمم خصيصاً لهذا الأمر، و ذلك يكون كافياً في أغلب الأحيان.
مشكلة المكون DateTimePicker أنه لا يمكن جعله فارغاً للدلالة على عدم وجود تاريخ (مثلاً حقل تاريخ في قاعدة بيانات و قيمته NULL). هناك طريقتان للدلالة على عدم وجود تاريخ (أو إهمال التاريخ في الواقع) في المكون DateTimePicker:
1. باستخدام الـ CheckBox المدمج معه (بضبط الخاصية ShowCheckBox على True لإظهار الـ CheckBox المدمج) و ضبط الخاصية Checked على False للدلالة على إهمال التاريخ (سيظهر التاريخ باهتاً لكنه لا يختفي).
2. بضبط الخاصية Format على Custom و ضبط الخاصية CustomFormat على فراغ واحد " " فيختفي التاريخ من الـ DateTimePicker (طبعاً في العرض فقط و ليس كقيمة) للدلالة على على عدم وجود تاريخ!
* بدلاً من ذلك يمكننا استعمال مربع نص (TextBox) و زر (Button) أمامه، و تقويم شهري (MonthCalendar). في هذه الحالة يمكننا جعل مربع النص فارغاً بالفعل عند عدم وجود تاريخ.
أ. اضبط الخاصية ReadOnly لمربع النص على True لمنع الكتابة فيها بشكل مباشر.
ب. المهم بالنسبة إلى المكون MonthCalendare هو ضبط الخاصية MaxSelectionCount على 1 لمنع تحديد نطاق يضم أكثر من يوم واحد (المكون يسمح بشكل افتراضي بتحديد نطاق يضم 7 أيام).
ج. نستعمل الأكواد التالية:
كود :
' عند النقر على الزر
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' تمييز التاريخ الحالي حسب تاريخ الجهاز
MonthCalendar1.TodayDate = Date.Today
' تحديد التاريخ الذي يشير إليه التاريخ في مربع النص
If IsDate(Text1.Text) Then
MonthCalendar1.SelectionStart = CType(Text1.Text, Date)
Else
MonthCalendar1.SelectionStart = Date.Today
End If
' ضبط موقع التقويم ليكون تحت مربع النص
MonthCalendar1.Left = Text1.Left
MonthCalendar1.Top = Text1.Top + Text1.Height
' إظهار التقويم و وضع التركيز عليه
MonthCalendar1.Visible = True
MonthCalendar1.Focus()
End Sub
Private Sub MonthCalendar1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MonthCalendar1.Leave
' عند مغادرة التقويم، يتم إخفاؤه
MonthCalendar1.Visible = False
End Sub
Private Sub MonthCalendar1_DateSelected(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateSelected
' عند اختيار تاريخ (بالنقر عليه بتحديده بالأسهم ثم ضغط المفتاح إنتر) ننسخ التاريخ المحدد إلى مربع النص
Text1.Text = e.Start.ToString("dd/MM/yyyy")
' نعيد التركيز إلى مربع النص
Text1.Focus()
End Sub
Private Sub Text1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Text1.KeyDown
If (e.Modifiers = Keys.None) And (e.KeyCode = Keys.F4) Then
' في مربع النص نعرض التقويم F4 عند ضغط المفتاح
Button1.PerformClick()
ElseIf (e.Modifiers = Keys.None) And (e.KeyCode = Keys.Delete) Then
' في مربع النص نمسح التاريخ Delete عند ضغط المفتاح
Text1.Text = ""
End If
End Sub
* بالنسبة إلى الحدث الأخير (KeyDown) لمربع النص فهو لمحاكاة عمل الـ DateTimePicker و الـ ComboBox حيث عند ضغط المفتاح F4 يتم فتح المكون للسماح للمستخدم بالاختيار.
نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ