Как я могу удалить кнопку "Сегодня" из элемента управления DateTimePicker (из формы Windows Form Control)

89
7

В элементе управления DateTimePicker, когда мы нажимаем кнопку раскрывающегося списка, отображается календарь. в нижней части календаря есть кнопка: Сегодня, которая при нажатии, устанавливает текущую дату в качестве выбранной даты.
Я хочу удалить/скрыть эту кнопку из элемента управления. Как я могу это сделать?

спросил(а) 2021-01-25T16:03:47+03:00 6 месяцев назад
1
Решение
134

Встроенный элемент управления DateTimePicker Windows поддерживает сообщение DTM_SETMCSTYLE, чтобы установить стиль календаря месяца. Вам просто нужно немного pinvoke отправить сообщение, когда элемент управления создан и изменить стиль по умолчанию. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Компиляция. Отбросьте новый элемент управления сверху панели инструментов на свою форму, заменив старый.


using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class MyDateTimePicker : DateTimePicker {
protected override void OnHandleCreated(EventArgs e) {
int style = (int)SendMessage(this.Handle, DTM_GETMCSTYLE, IntPtr.Zero, IntPtr.Zero);
style |= MCS_NOTODAY | MCS_NOTODAYCIRCLE;
SendMessage(this.Handle, DTM_SETMCSTYLE, IntPtr.Zero, (IntPtr)style);
base.OnHandleCreated(e);
}
//pinvoke:
private const int DTM_FIRST = 0x1000;
private const int DTM_SETMCSTYLE = DTM_FIRST + 11;
private const int DTM_GETMCSTYLE = DTM_FIRST + 12;
private const int MCS_NOTODAYCIRCLE = 0x0008;
private const int MCS_NOTODAY = 0x0010;

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

Похоже на это во время выполнения, в Windows 7:


enter image description here

ответил(а) 2021-01-25T16:03:47+03:00 6 месяцев назад
45

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

Если это помогает, я нашел это Показывает выпадающий список календаря с производным классом DateTimePicker, который ссылается на пользовательский календарь Winforms Календарь медийного месяца и даты DatePicker.

ответил(а) 2021-01-25T16:03:47+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема