如何从Windows表单控件的DateTimePicker控件中删除“今天”按钮

5
在DateTimePicker控件中,当我们点击下拉按钮时,会显示一个日历。在日历底部,有一个Today按钮,点击该按钮后,将当前日期设置为所选日期。 我想从控件中删除/隐藏该按钮。我该如何做?

在WPF中是有可能的。在Winforms中,我不确定。 - Nikhil Agrawal
经过一番搜索,我认为在Winforms中不可能实现。 - seekerOfKnowledge
2个回答

13

Windows本地的DateTimePicker控件支持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


在解决方案中,您已经继承了dateTimePicker控件,但是如何在不使用继承的情况下完成上述任务呢? - KhannaB7
针对以上的编程需求,我们可以不使用继承,而是直接使用以下代码: this.dtp1.handle //dtp1是一个dateTimePicker对象。 - KhannaB7
你的答案很完美,在Windows 7上运行良好,但在Windows XP上无法运行。请问如何使其在Windows XP上运行? - KhannaB7

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接