読者です 読者をやめる 読者になる 読者になる

たきるブログ

C#やOracleなどの情報を書いています。

【C#】nullを許容する、読み取り専用にする、文字色・背景色の変更ができるDateTimePicker

開発環境

長年の悩み

NullableDateTimePickerだのUltraDateTimePicker、探してたらほんと色々あったけど、どこかがイマイチだったりしてた。
VisualStylesが無効でないとダメだとか、Tab内だとダメだとか、TableLayoutPanel内だとダメだとか、色んな動作を組み合わせて使ってみるとダメなところが見つかったりだとか。

結論

散々調べた結果、俺の中で一番スマートで、100%(だと思う)真っ当に動作するDateTimePickerを作ることができた!
利用には困らないレベルになっていると思うけど、他のコントロールやプロパティと組み合わせてうまく動作しないという場面があったら、直したいから教えてもらいたい。

動作内容

  • Valueにnull指定を可能。
  • BackSpace, Deleteキーでnull入力が可能。
  • ReadOnlyプロパティの追加。(TextBoxで置き換える)
  • ReadOnlyLabelプロパティの追加。(Labelで置き換える)
  • BaseBackColor, FocusBackColorプロパティの追加。(フォーカスアウト/イン時の背景色)
  • BaseForeColor, FocusForeColorプロパティの追加。(フォーカスアウト/イン時の文字色)
  • 標準DateTimePickerと同様のイベント発生起因を踏襲。
  • Format, CustomFormat, Visibleプロパティも標準動作を踏襲し、ReadOnly, ReadOnlyLabelプロパティの状態を加味する。
  • OnXXXX()で、ReadOnly, ReadOnlyLabelプロパティの状態を加味する。

背景色は、マウスカーソルを行き来させるとたまにちらつくのが難点だけど、まぁ許容レベルということで。

ウィンドウメッセージはちゃんとconstにした方がいいかもしれないし、DesignModeも別出しにした方がいいでしょう。
とりあえず、1ファイルで実現できるコードを全部載せています。

コード

Nullable, ReadOnly, Changable ForeColor, Changable …