LoginSignup
0
0

いい感じのTextBox for TimeSpan

Posted at

TimeSpanを、いい感じに入力できて表示する値コンバーターです。

  • 時間間隔(TimeSpan) をTextBoxに入力する時に、どの区切り文字でもOKにします。→ざっくり楽に入力できます。
  • 日数は、時間に変換して表示できます。2days → 48hours。
  • マイナス表示ができます。 -1と入力した時、-1:0:0と表示。

入力値からTimeSpanへ変換

  • 1つの数値は、時間として認識。
    "0" to "0:0:0" , "-1" to "-01:00:00"
  • 2つの数値は、時間・分として認識。
    "1:2" to "01:02:00"
  • 3つの数値は、時間・分・秒として認識。
    "1:2:3" to "01:02:03"
  • 4つの数値は、日数・時間・分・秒として認識。
    "1:2:3:4" to "1.02:03:04"
  • 数字以外の文字は、区切り文字として利用。ただし、先頭の「-」は、マイナスとして扱う。
    "1,2 3aaaa4" to "1.02:03:04"

パラメーター

  • ConverterParameter
    TimeSpan format stringsを利用でき、また、{SumHours}, {Sign}を、利用可能。
    {SumHours}は、日数を時間に換算したのを含め合計した時間。また、自動でマイナス表示になります。
    {Sign}は、時間間隔がマイナスの時に「-」に置き換えます。
  • IsShortTime
    Trueの時は、入力した秒の数値が0で無いとエラーが返ります。
  • Max, Min
    入力時の制限として、時間間隔の最大値・最小値を指定。

デモ画面

image.png

  • 25とだけ入力すると25時間0分0秒として認識。
    デフォルトでは、日数を時間に換算して表示する。
    image.png
    image.png
    TextBoxでなく、TextBlockにコンバーターを利用した場合。
    image.png

  • 356日間は、Maxパラメータに指定した355日23時59分59秒を超えているのでエラー
    image.png

  • IsShortTimeを有効にした場合、1時間2分3秒として入力しても、秒が0で無いのでエラー。
    image.png

  • -240時間 → {Sign}を、「-」に置き換えて、-10日間として表示。
    d hh mm ssは、TimeSpan 書式指定文字列。
    image.png
    image.png

その他

  • 顧客マネジメントソフト ガンジスで利用するために作成しました。
  • 参考:How to parse string with hours greater than 24 to TimeSpan?
  • 時間は、緩いフォーマットで入力できると入力が楽な感じです。区切り文字に「:」を必ず使わないといけない、とかの入力のフォーマットの制限は、PCの都合であって人に合わせたものでは無いとも言えるでしょう。電話番号の入力は、半角・全角のどちらも受け入れて、内部で半角に変換して統一するのが、ユーザーフレンドリーなのと同じです。

コード

System Requirements

  • .NET 6

History

  • 2021-03-26 Ver 1.0
  • 2021-12-17 Ver 1.1
    • Added ValidationRules: IsShortTime
    • Changed StringFormat. Replace
  • 2023-09-19 Ver 1.2
    • Changed to from .NET 5 to .NET 6
    • Fixed TimeSpanUtils.GetTimeSpan Method.

ライセンス

MIT

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0