How can i show month selection calendar in my app

三世轮回 提交于 2019-11-29 14:42:49

I'm not entirely sure if I understand what you're asking. If you want to show the month calendar without a picker control attached to it, you can use the MonthCalendar control.

It looks like this (note the absence of the textbox and drop-down arrow):

  


If you're wondering if there's a way to limit the content that is displayed on the control to only the months themselves, rather than the individuals days of the month, then no that's not possible. The control does not provide any built-in facility for this.

However, if you do want to use the picker control, you can limit the values it displays to only the name of the month. Do that by specifying a custom format string:

myDateTimePicker.Format = DateTimePickerFormat.Custom
myDateTimePicker.CustomFormat = "MMMM"

This results in something like the following (notice that the drop-down content is unchanged, but the information that is recorded in the picker control itself is limited to the name of the month):

  

This is going to require a bit of pinvoke to send the messages to get the calendar to switch the view. Implement the DateTimePicker's DropDown event handler like this:

    private void dateTimePicker1_DropDown(object sender, EventArgs e) {
        IntPtr cal = SendMessage(dateTimePicker1.Handle, DTM_GETMONTHCAL, IntPtr.Zero, IntPtr.Zero);
        SendMessage(cal, MCM_SETCURRENTVIEW, IntPtr.Zero, (IntPtr)1);
    }

    // pinvoke:
    private const int DTM_GETMONTHCAL = 0x1000 + 8;
    private const int MCM_SETCURRENTVIEW = 0x1000 + 32;

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

The view switching is animated, it is going to be visible to the user. This won't work for Windows versions prior to Vista. Use an online translator if necessary to translate this C# code to VB.NET

Another way would be to set the date time picker Format property to custom and in the custom format property enter MMMM to show the name of the month. Then set the show up down to true so it will bypass the drop down and let the user go up and down through the months.

Put the MonthCalendar control into a GroupBox. Shrink the GroupBox so that only the Month part of the MonthCalendar control is visible to the form. This will hide the days.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!