DATETIMEPICKER – MONTHCALENDAR

1.     DateTimePicker trong C#

Điu khiDateTimePicker cho phép ngưi dùng chn ngày tháng như mt lch biu nhưng biu din dng ComboBox.

Các đi tưng ngày tháng biu din trong DateTimePicker thc cht là các đi tưng thuc lp DateTime. Điu khin DateTimePicker đưc đt trong nhóm Common Controls ca ca s ToolBox.

winforms bai10 04 PNG

Hình 2.58. Điều khiển DateTimePicker

Bảng 2.30. Một số thuộc tính thường dùng trong DateTimePicker

Thuộc tính

Mô tả

Format

Đinh dạng kiểu hiển thị của ngày tháng

*Lưu ý: Thường sử dụng giá trị kiểu Short

Value

Trả về giá trị hiện thời của điều khiển DateTimePicker

Value.Date

Trả về ngày tháng năm

Value.Day

Trả về ngày của tháng

Value.Month

Trả về tháng

Value.Year

Trả về năm

Value.DateOfWeek

Trả về ngày của tuần (0 là chủ nhật, 1 là thứ hai, ..., 6 là thứ bảy)

CustomFormat

Cho phép lập trình tạo ra một đinh dạng khác nhau về ngày tháng.

*Lưu ý: Đinh dạng ngày tháng năm như kiểu Việt Nam thì kiểu định dạng phải là dd/MM/yyyy. Khi đó thuộc tính Format phải thiết lập là Cusom

MaxDate

Thiết lập ngày lớn nhất cho phép người dùng chọn trên điều khiển DateTimePicker

MinDate

Thiết lập ngày nhỏ nhất cho phép người dùng chọn trên điều khiển DateTimePicker

Bảng 2.31. Một số sự kiện thường dùng

Sự kiện

Mô tả

ValueChanged

Phát sinh khi người đung chọn giá trị khác với giá trị trước đó trên điều khiển DateTimePicker

CloseUp

Phát sinh người dùng kết thúc việc chọn ngày trên điều khiển DateTimePicker

2.     MonthCalendar

MonthCalendar là điu khin hin th lch dưi dng mt lch biu cho phép ngưi dùng chn ngày tháng. Nhưng khác bit là MonthCalendar cho phép ngưi dùng có th chn mt tp các ngày hay nói cách khác là mt tp các đi tưng thuc lp DateTime.

Điu khin MonthCalendar đưc đt trong nhóm Common Controls.

winforms bai10 03 PNG

Hình 2.59. Điều khiển MonthCalendar

Bảng 2.32. Một số thuộc tính thường dùng

Thuộc tính

Mô tả

MaxDate

Thiết lập ngày lớn nhất cho phép người dùng chọn trên điều khiển MonthCalendar

MinDate

Thiết lập ngày nhỏ nhất cho phép người dùng chọn trên điều khiển MonthCalendar

SelectionRange

Trả về một dãy các ngày liên tục được chọn bởi người dùng

SelectionStart

Trả về ngày đầu tiên trong dãy tại thuộc tính SelectionRange

SelectionEnd

Trả về ngày cuối cùng trong dãy tại thuộc tính SelectionRange

AnnuallyBoldedDates

Chứa một mảng các ngày. Trong mỗi năm, các ngày trong mảng sẽ được bôi đen MonthCalendar

BoldedDates

Chứa mảng các ngày. Các ngày này sẽ được bôi den trên điều khiển MonthCalendar tại những năm chỉ định

MaxSelectCount

Thiết lập số lượng ngày tối đa mà người dùng có thể chọn

MonthlyBoldedDates

Chứa mảng các ngày trong mỗi tháng, các ngày trong mảng sẽ được bôi đen trên MonthCalendar

Trong MonthCalendar có mt s kin đưc s dng rt thông dng đó chính là DateChanged. Đây là mt s kin đưc phát sinh khi mt ngày mi hoc mt dãy các ngày mi đưc chn.

3.     Ví dụ sử dụng DateTimePicker và MonthCalendar

Trong ví d này s thc hin viết chương trình có s dng DateTimePicker và MonthCalendar đ các bn hiu rõ hơn v công dng cũng như cách nó hot đng.

Ví dụ sử dụng điều khiển DateTimePicker

Trong ví d đu tiên này s thc hin mt chương trình đơn gin trong đó có s dng DateTimePicker, c th s thc hin theo Form dưi đây vi mt s chc năng tương ng.

winforms bai10 05 PNG

Hình 2.60. Thiết kế giao diện sử dụng DateTimePicker

Chương trình có các chc năng như sau:

·       TextBox "H Tên": Ch cho phép nhp ký t hoa hoc thưng, cho phép nhp khong trng và cho phép xóa lùi.

·       TextBox "S Đin Thoi": Ch cho phép nhp s và đưc xóa lùi.

·       DateTimePicker "Thi Gian": Ch cho phép chn thi gian đăng ký hc ln hơn thi gian hin ti.

·       Button "Đăng ký": Hin th hp thoi bao gm các ni dung trong ô TextBox và thi gian đưc chn trong DateTimePicker.

·       Button "Thoát": Đóng chương trình.

·       Đu tiên chúng ta s to Form tương t như trên:

·       Mt s Label vi ni dung tương ng.

·       3 TextBox đ nhp tên, sđt, email.

·       2 Button đ đăng ký và thoát.

·       1 DateTimePicker đ chn thi gian hc.

Sau khi to đưc Form, ta s bt đu x lý s kin cho tng TextBox và Button.

c 1: X lý s kin cho TextBox "H Tên", vi chc năng ch cho phép nhp lý t hoa hoc thưng. cho phép nhp khong trng và xóa lùi.

Ta s viết trên s kiKeyPress trong TextBox, s dng KeyChar đ làm điu kin.

private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e)

    {

       if (!((e.KeyChar >= 'a' && e.KeyChar <= 'z') ||(e.KeyChar == ' ')|| (e.KeyChar >= 'A' && e.KeyChar <= 'Z') || e.KeyChar == (char)8))

       e.Handled = true;

    }

c 2: X lý s kin cho TextBox "S Đin Thoi", vi chc năng ch cho phép nhp s và đưc xóa lùi.

Tương t như TextBox "H Tên" ta cũng s s dng KeyPress KeyChar đ viết điu kin.

private void txtSDT_KeyPress(object sender, KeyPressEventArgs e)

    {

        if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == (char)8))

          e.Handled = true;

    }

c 3: X lý s kin cho DateTimePicker "Thi Gian", vi chc năng ch cho phép chn thi gian đăng ký hc ln hơn thi gian hin ti. Ta s viết s kin  FormLoad.

private void Form1_Load(object sender, EventArgs e)

    {

       dateTimePicker1.MinDate = DateTime.Now;

       int dayofmonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

       dateTimePicker1.MaxDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, dayofmonth);

    }

c 4: X lý s kin cho Button "Đăng Ký", vi chc năng s hin th ni dung trong các ô TextBox và thi gian đưc chn trong DateTimePicker trên hp thoi MessageBox.

private void btnDangKy_Click(object sender, EventArgs e)

    {

        if (string.IsNullOrEmpty(txtHoTen.Text) || string.IsNullOrEmpty(txtSDT.Text) || string.IsNullOrEmpty(txtEmail.Text))

        {

            MessageBox.Show("Bạn chưa nhập đầy đủ thông tin");

        }

        else if (!string.IsNullOrEmpty(txtHoTen.Text) || !string.IsNullOrEmpty(txtSDT.Text) || !string.IsNullOrEmpty(txtEmail.Text) == true)

        {

            MessageBox.Show("Chúc mừng bạn: " + txtHoTen.Text + "\nSố Điện Thoại: " + txtSDT.Text + "\nEmail: " + txtEmail.Text + "\nThời gian lựa chọn: " + dateTimePicker1.Value.ToShortDateString());

        }

    }

c 5: X lý s kin cho Button "Thoát", vi chc năng s đóng chương trình khi ngưi dùng nhn vào nút này.

1

2

3

4

private void bntThoat_Click(object sender, EventArgs e)

    {

        Application.Exit();       

    }

Kết qu:

winforms bai10 06 PNG

Hình 2.61. Kết quả sử dụng DateTimePicker

 

Full Code:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace Cau5

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }        

    private void btnDangKy_Click(object sender, EventArgs e)

    {

        if (string.IsNullOrEmpty(txtHoTen.Text) || string.IsNullOrEmpty(txtSDT.Text) || string.IsNullOrEmpty(txtEmail.Text))

        {

            MessageBox.Show("Bạn chưa nhập đầy đủ thông tin");

        }

        else if (!string.IsNullOrEmpty(txtHoTen.Text) || !string.IsNullOrEmpty(txtSDT.Text) || !string.IsNullOrEmpty(txtEmail.Text) == true)

        {

            MessageBox.Show("Chúc mừng bạn: " + txtHoTen.Text + "\nSố Điện Thoại: " + txtSDT.Text + "\nEmail: " + txtEmail.Text + "\nThời gian lựa chọn: " + dateTimePicker1.Value.ToShortDateString());

        }

    }

    private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e)

    {

       if (!((e.KeyChar >= 'a' && e.KeyChar <= 'z') ||(e.KeyChar == ' ')|| (e.KeyChar >= 'A' && e.KeyChar <= 'Z') || e.KeyChar == (char)8))

       e.Handled = true;

    }

  private void txtSDT_KeyPress(object sender, KeyPressEventArgs e)

    {

        if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == (char)8))

          e.Handled = true;

    }

    

    private void Form1_Load(object sender, EventArgs e)

      {

         dateTimePicker1.MinDate = DateTime.Now;

         int dayofmonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

         dateTimePicker1.MaxDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, dayofmonth);

      }

    private void bntThoat_Click(object sender, EventArgs e)

    {

        Application.Exit();       

    }

  }

}

Ví dụ sử dụng điều khiển MonthCalendar

Trong ví d này s thc hin viết mt chương trình trong đó có s dng MonthCalendar, c th ta s to giao din như Form dưi đây vi các chc năng tương ng.

winforms bai10 02 PNG

Hình 2.62. Ví dụ sử dụng điều khiển MonthCalendar

Các chc năng trong chương trình:

·       Button "Hin th": Hin th ngày bt đu chn (SelectionStart), ngày cui cùng chn (SelectionEnd), MinDate, MaxDate, Today.

·       Button "Count Day": Đếm tng ngày t lúc SelectionStart đến SelectionEnd.

·       Button "Count Hour": Đếm tng gi t lúc SelectionStart đến SelectionEnd.

Vic đu tiên ta cn to giao din cho Form tương t như Form trên, bao gm:

·       Các Label vi ni dung tương ng.

·       7 TextBox đ hin th các ni dung.

·       3 Button đ viết s kin.

·       1 MonthCalendar làm lch biu.

Tiếp đến ta s ln lưt viết các chc năng cho chương trình.

c 1: X lý s kin cho Button "Hin th", vi chc năng hin th ngày bt đu và ngày cui cùng đưc chn, MinDate, MaxDate, Today.

private void btnHienthi_Click(object sender, EventArgs e)

{

     txtStart.Text = monthCalendar1.SelectionStart.ToShortDateString();

     txtEnd.Text = monthCalendar1.SelectionEnd.ToShortDateString();

     txtmin.Text = monthCalendar1.MinDate.ToShortDateString();

     txtMax.Text = monthCalendar1.MaxDate.ToShortDateString();

     txtDayDate.Text = monthCalendar1.TodayDate.ToShortDateString();

}

c 2: X lý s kin cho Button "Count Day", vi chc năng đếm s ngày đưc chn.

private void btnCountday_Click(object sender, EventArgs e)

    {

        int numdays;

        numdays = Convert.ToInt32((monthCalendar1.SelectionEnd - monthCalendar1.SelectionStart).TotalDays);

        txtday.Text = numdays.ToString();

    }

c 3: X lý s kin cho Button "Count Hour", vi chc năng đếm s gi đưc chn.

private void btnCountHour_Click(object sender, EventArgs e)

    {

        int numhour;

        numhour = Convert.ToInt32((monthCalendar1.SelectionEnd - monthCalendar1.SelectionStart).TotalHours);

        txthour.Text = numhour.ToString();

    }

Kết qu:

winforms bai10 01 PNG

Hình 2.63. Kết quả sử dụng Month Calendar

Full Code:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace Cau2

{

  public partial class Form1 : Form

  {

    public Form1()

    {

        InitializeComponent();

    }

    private void btnHienthi_Click(object sender, EventArgs e)

    {

        txtStart.Text = monthCalendar1.SelectionStart.ToShortDateString();

        txtEnd.Text = monthCalendar1.SelectionEnd.ToShortDateString();

        txtmin.Text = monthCalendar1.MinDate.ToShortDateString();

        txtMax.Text = monthCalendar1.MaxDate.ToShortDateString();

        txtDayDate.Text = monthCalendar1.TodayDate.ToShortDateString();

    }

    private void btnCountday_Click(object sender, EventArgs e)

    {

        int numdays;

        numdays = Convert.ToInt32((monthCalendar1.SelectionEnd - monthCalendar1.SelectionStart).TotalDays);

        txtday.Text = numdays.ToString();

    }

    private void btnCountHour_Click(object sender, EventArgs e)

    {

        int numhour;

        numhour = Convert.ToInt32((monthCalendar1.SelectionEnd - monthCalendar1.SelectionStart).TotalHours);

        txthour.Text = numhour.ToString();

    }

  }

}

4.     Bài tập

DateTimePick và MonthCalendar là hai điu khin khá quan trng và đưc s dng nhiu, vì vy phi luyn tp nhiu đ có th thành tho.