5

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

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

4

4 回答 4

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

于 2011-03-11T09:20:26.593 回答
4

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

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

  月历控件


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

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

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

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

  指定自定义格式的 DateTimePicker

于 2011-03-11T08:40:59.937 回答
0

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

于 2014-06-27T15:58:22.027 回答
-2

将 MonthCalendar 控件放入 GroupBox。缩小 GroupBox 以便只有 MonthCalendar 控件的 Month 部分对窗体可见。这将隐藏日子。

于 2014-01-30T20:15:16.497 回答