4

DateTimePickerコントロールで、ドロップダウンボタンをクリックすると、カレンダーが表示されます。カレンダーの下部にボタンがあります:今日、クリックすると、現在の日付を選択した日付として設定します。そのボタンをコントロールから削除/非表示にしたい。どうすればいいですか?

4

2 に答える 2

12

ネイティブのWindowsDateTimePickerコントロールは、月間カレンダーのスタイルを設定するためのDTM_SETMCSTYLEメッセージをサポートしています。コントロールの作成時にメッセージを送信し、デフォルトのスタイルを変更するには、ちょっとしたピンボークが必要です。プロジェクトに新しいクラスを追加し、以下に示すコードを貼り付けます。コンパイル。ツールボックスの上部からフォームに新しいコントロールをドロップし、古いコントロールを置き換えます。

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では、実行時に次のようになります。

ここに画像の説明を入力してください

于 2012-06-06T20:11:05.057 に答える
0

少し前に自分でこのコントロールを変更したいと思っていたのですが、それが不可能であることに気付いたのを覚えているようです。解決策は、独自のカスタムコントロールを構築することでした。

それが役立つ場合は、派生したDateTimePickerクラスを使用して[カスタムカレンダーを表示する]ドロップダウンを見つけました。これは、カスタムWinformsカレンダーCulture AwareMonthCalendarおよびDatePickerにリンクしています。

于 2012-06-06T19:09:30.373 に答える