DateTimePicker
ユーザーがボタンをクリックするとDropDown
、カレンダーが表示されます。DropDown イベントでカレンダーを表示したくありません。
このイベントを上書きして、ユーザーがドロップダウン ボタンをクリックしたときにカスタム フォームを表示する方法はありますか??
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 も必要ありません。通常のコンボ ボックスまたはドロップダウン ボタンを使用するだけで、クリックしたときに任意のフォームを表示できます。