تقييم الموضوع :
  • 2 أصوات - بمعدل 3
  • 1
  • 2
  • 3
  • 4
  • 5
استعمال MonthCalendar و مربع نص لاختيار التاريخ
#1
السلام عليكم...

عند توفير طريقة للمستخدم لاختيار تاريخ فإننا غالباً ما نستخدم المكون 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 يتم فتح المكون للسماح للمستخدم بالاختيار.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
تم الشكر بواسطة: ربيع , مالكـ , مبرمج بلا حدود
#2
مرحبا اخي ناجي إبراهيم
فكرة جميله وتعتبر حل جميل لمن يواجه مشكله في حفظ التاريخ
داخل الداتا بيز
شكرا لك على هالفكرة الجميله


وتم ترجمت الفكرة الى كود في المرفقات



الملفات المرفقة
.zip   WindowsApplication_MC.zip (الحجم : 17.79 ك ب / التحميلات : 203)
لا يلومني على انقطاعاتي المتكررة
فهي اما عمل او دراسة او تربية




سُبْحَانَكَ اللَّهُمَّ وَبِحَمْدِكَ، أَشُهَّدٌ أَنَّ لَا إلَهَ إلا أَنْتَ، أَسَتَغْفِرُكَ وَأَتُوبَ إِلَيْكَ
الرد }}}}
تم الشكر بواسطة: ناجي إبراهيم , مبرمج بلا حدود
#3
بارك الله فيك شرح مبسط وفكره جميله
الله يعطيك العافيه
الرد }}}}
تم الشكر بواسطة:
#4
يعطيك العافية ومشكور جدا صارلي فترة ابحث عن حل لهذه المشكلة
وبانتظار ابداعاتك اخوي
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [مشروع] برنامج اظهار التاريخ هجري و الميلادي محمد مسافر 5 305 11-08-16, 12:55 AM
آخر رد: aliday03
  [VB.NET] جعل برنامجك تجريبى بالايام مع تخطى ثغرة تغيير التاريخ بدون الاتصال بالانترنت mohamed haroon 6 904 15-06-16, 11:44 PM
آخر رد: خالد الرماح
  [مشروع] الحفظ لعدة اعمدة في جدول من مربع نص واحد سعود 1 519 20-08-15, 08:44 PM
آخر رد: العزابي
  [مشروع] عمل آلة حاسبة عن طريق اضافة محتوى مربع الادخال الى مصفوفة() سعود 0 675 27-03-15, 05:24 AM
آخر رد: سعود
  [مشروع] إجراء عملية حسابية بسيطة من مربع نص واحد سعود 5 1,133 18-03-15, 12:42 AM
آخر رد: سعود
  @@@ محول التاريخ (هجري، ميلادي) @@@ @@أبورائد@@ 7 2,716 20-12-14, 10:04 PM
آخر رد: ابو ابراهيم

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم