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

Koo*_*bin 5 vb.net controls monthcalendar datepicker winforms

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

我想要的输出: 在此输入图像描述

Han*_*ant 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);
Run Code Online (Sandbox Code Playgroud)

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


Cod*_*ray 4

我不完全确定我是否明白你在问什么。如果您想在不附加选择器控件的情况下显示月历,则可以使用该MonthCalendar控件

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

  MonthCalendar控件


如果您想知道是否有一种方法可以将控件上显示的内容限制为仅显示月份本身,而不是该月的各个日期,那么这是不可能的。该控件不为此提供任何内置设施。

但是,如果您确实想使用选取器控件,则可以将其显示的值限制为仅显示月份名称。通过指定自定义格式字符串来做到这一点:

myDateTimePicker.Format = DateTimePickerFormat.Custom
myDateTimePicker.CustomFormat = "MMMM"
Run Code Online (Sandbox Code Playgroud)

这会产生类似以下内容的结果(请注意,下拉内容没有更改,但选择器控件本身记录的信息仅限于月份名称):

  指定自定义格式的 DateTimePicker