5

DateTimePickerユーザーがボタンをクリックするとDropDown、カレンダーが表示されます。DropDown イベントでカレンダーを表示したくありません。

このイベントを上書きして、ユーザーがドロップダウン ボタンをクリックしたときにカスタム フォームを表示する方法はありますか??

4

1 に答える 1

5

DropDown イベントでカレンダーを表示したくありません。

コントロールのShowUpDownプロパティを に設定すると、カレンダーが表示されないようにすることができますtrue。ドロップダウン カレンダーの代わりに、DateTimePicker コントロールの横にスピン ボタンが表示され、ユーザーが目的の日付/時刻を選択できるようになります。

このイベントを上書きして、ユーザーがドロップダウン ボタンをクリックしたときにカスタム フォームを表示する方法はありますか??

ええ、そうだと思います。コントロールがドロップダウン カレンダーを表示するときに発生するDropDownイベントを処理できます。このイベント ハンドラーでは、任意のフォームを表示できます。唯一の問題は、ドロップダウン カレンダーがまだ通常どおり表示されることです。どうやってそれを防いでいるのかわからない。

ただし、ドロップダウンカレンダーを強制的に再度閉じることで、ハッキングすることができます. SendMessageこれを行うには、関数をP/Invoke し、コントロールにDTM_CLOSEMONTHCALメッセージを送信します。

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

private const uint DTM_FIRST         = 0x1000;
private const uint DTM_CLOSEMONTHCAL = DTM_FIRST + 13; 

public static void CloseCalendar(this DateTimePicker dtp)
{
    SendMessage(dtp.Handle, DTM_CLOSEMONTHCAL, IntPtr.Zero, IntPtr.Zero);
}

しかし、あなたがこれをやりたい理由は想像できません。カレンダーやスピン ボタン コントロールが必要ない場合は、DateTimePicker も必要ありません。通常のコンボ ボックスまたはドロップダウン ボタンを使用するだけで、クリックしたときに任意のフォームを表示できます。

于 2013-04-12T06:08:01.993 に答える