Как я могу показать календарь выбора месяца в моем приложении - PullRequest
5 голосов
/ 11 марта 2011

Я заинтересован в отображении списка за 12 месяцев, аналогично тому, как был выбран контроль выбора месяца в DatePicker. Но я не люблю показывать средство выбора даты, чтобы показывать даты того месяца тоже ... только просмотр месяца в порядке, так что я могу выбрать месяц из списка.

мой желаемый результат: enter image description here

Ответы [ 4 ]

6 голосов
/ 11 марта 2011

Для отправки сообщений понадобится немного пинвока, чтобы календарь переключился в режим просмотра. Реализуйте обработчик события DropDown DateTimePicker следующим образом:

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

Переключение вида анимировано, оно будет видно пользователю. Это не будет работать для версий Windows до Vista. При необходимости используйте онлайн-переводчик для перевода этого кода C # в VB.NET

4 голосов
/ 11 марта 2011

Я не совсем уверен, понимаю ли я, что вы спрашиваете. Если вы хотите показать календарь месяца без привязанного элемента управления выбора, вы можете использовать MonthCalendar элемент управления .

Это выглядит так (обратите внимание на отсутствие текстового поля и стрелки раскрывающегося списка):

MonthCalendar control


Если вам интересно, есть ли способ ограничить содержимое, отображаемое на элементе управления, только самими месяцами, а не отдельными днями месяца, то нет, это невозможно. Элемент управления не предоставляет никаких встроенных средств для этого.

Однако, если вы do хотите использовать элемент управления выбора, вы можете ограничить отображаемые значения только названием месяца. Сделайте это, указав строку произвольного формата:

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

В результате получается что-то вроде следующего (обратите внимание, что раскрывающийся контент не изменяется, но информация, записанная в самом элементе управления средства выбора, ограничена названием месяца):

DateTimePicker with custom format specified

0 голосов
/ 27 июня 2014

Другим способом было бы установить для свойства формата выбора даты и времени значение custom и в свойстве custom format введите MMMM, чтобы отобразить название месяца. Затем установите показ вниз на true, чтобы он пропустил выпадающий список и позволил бы пользователю подниматься и опускаться в течение месяцев.

0 голосов
/ 31 января 2014

Поместите элемент управления MonthCalendar в GroupBox. Сократите GroupBox так, чтобы только форма Month элемента управления MonthCalendar была видна форме. Это скроет дни.

...