如何在我的应用中显示月份选择日历

时间:2011-03-11 07:19:43

标签: vb.net winforms controls datepicker monthcalendar

我有兴趣以与datepicker的月份选择控制类似的方式显示12个月的列表。但是我不想显示日期选择器来显示那个月的日期...只有月份视图是可以的,这样我就可以从列表中选择月份。

我想要的输出: enter image description here

4 个答案:

答案 0 :(得分:6)

这需要一些pinvoke来发送消息以使日历切换视图。实现DateTimePicker的DropDown事件处理程序,如下所示:

    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);

视图切换是动画的,它将对用户可见。这不适用于Vista之前的Windows版本。如有必要,请使用在线翻译将此C#代码翻译为VB.NET

答案 1 :(得分:4)

我不完全确定我是否明白你在问什么。如果您想要显示没有附加选择器控件的月份日历,则可以使用MonthCalendar control

看起来像这样(注意没有文本框和下拉箭头):

MonthCalendar control


如果您想知道是否有办法将控件上显示的内容限制为只有月份本身,而不是月份中的个人日期,那么这是不可能的。该控件不为此提供任何内置工具。

但是,如果执行想要使用选择器控件,则可以将显示的值限制为仅月份名称。通过指定自定义格式字符串来执行此操作:

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

这导致如下所示(注意下拉内容未更改,但选择器控件本身记录的信息仅限于月份名称):

DateTimePicker with custom format specified

答案 2 :(得分:0)

另一种方法是将日期时间选择器格式属性设置为自定义,并在自定义格式属性中输入MMMM以显示月份名称。然后将show up设置为true,这样它就会绕过下拉菜单,让用户在这几个月内上下移动。

答案 3 :(得分:-1)

将MonthCalendar控件放入GroupBox。收缩GroupBox,以便只有MonthCalendar控件的Month部分对表单可见。这将隐藏日子。