تقييم الموضوع :
  • 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 ك ب / التحميلات : 421)
لا يلومني على انقطاعاتي المتكررة
فهي اما عمل او دراسة او تربية




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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كتابة التاريخ بعدة صيغ العتيق 0 417 19-09-23, 12:58 AM
آخر رد: العتيق
  الان نفذ العمليات والدوال في مربع النص وكأنك تكتب في خلية اكسل Taha Okla 2 858 03-03-23, 03:17 PM
آخر رد: mrfenix93
  [مثال] كتابة التاريخ و الوقت بعدة صيغ asmarsou 0 548 20-12-22, 09:56 PM
آخر رد: asmarsou
Rainbow [كود] حساب التاريخ والوقت بالايام والساعات والثواني الى تاريخ محدد محمد مسافر 9 1,702 21-06-22, 03:03 PM
آخر رد: سعود
Rainbow [كود] حساب وقت التاريخ المتبقي مع اضافه مقطع تشغيل صوتي محمد مسافر 1 908 15-06-22, 10:09 AM
آخر رد: asmarsou
  [مشروع] استخلاص الحروف و الارقام والرموز من مربع النص او اي كونترول تضيفه سعود 0 1,231 15-01-22, 06:23 PM
آخر رد: سعود
  [مشروع] أداه TextBoxPlaceholder تسمح باظهار تلميح حول مربع النص عندما يكون فارغا Anas Mahmoud 0 1,516 01-12-20, 03:48 AM
آخر رد: Anas Mahmoud
  تنسيق عمود التاريخ في الDatagridview ليكون dd/MM/yyyy ggtt17121985 0 1,831 15-03-20, 01:13 AM
آخر رد: ggtt17121985
  [VB.NET] كود تحويل التاريخ Date Converter VB.NET keromero 0 2,894 24-09-19, 09:28 AM
آخر رد: keromero
Thumbs Up [مثال] الحل النهائي لمشكلة التاريخ الهجري مع قواعد بيانات اكسس محمود بكرى 3 3,039 04-06-19, 01:59 PM
آخر رد: solbi

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


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