質問: Visual Studio2013 C# よりコントロールのWPFカスタムコントロールよりコントロールを作成しております。 現在マスク型のテキストボックスを作成したいのですが、良い方法が浮かびません。 やりたいこととしては、 テキストボックスに固定文字(ハイフンなどを)指定して 固定文字部分は入力時に飛ばす形で入力できるような形にしたいです。 例. テキストボックスの文字列が"a222-11111"のとき(-が固定文字) 先頭からb1234と入力した場合 文字列が"b123-41111"のようになる。 また上記をフォーマットのようなプロパティで入力形式を指定したいです。 例.プロパティが&&&&-&&&&だった場合、 -は固定文字列 &は入力文字列部分 分かりづらい説明で申し訳ないのですが、良い方法がありましたら 教えていただければと思います。
回答: 自分もこうしたものを考えているのですが最初に仕様で悩んだので質問者さんがお考えの仕様を伺いたいと思います。以下パターンを"&&&&-&&&&"、初期状態を"xxxx-xxxx"と仮定します。 * 単一のTextBoxコントロールで入力させるという前提ですね? * 文字削除 初期状態から"1"を入力して"1xxx-xxxx"になったとしてBackspaceキーやDeleteキーを入力した場合どのような状態にしますか?"xxxx-xxxx"でしょうか? * カーソル移動 初期状態から"12"を入力した後、カーソルを左右に移動した際の動作はどう考えますか?例えば右に移動して"3"を入力した場合は"12x3-xxxx"というような入力をさせますか?それとも未入力の文字より右へは移動禁止といった仕様ですか?左への移動は入力された文字数分は移動可能でしょうか?カーソル移動を許すとして移動の際にハイフンは自動的に飛ばして移動するのですよね? 8文字目を入力し終わったときカーソルは最後の文字の右に置くのでしょうか?それとも次のフィールドへTabOrderに従って遷移? * 文字範囲の選択操作 Shiftを押しながらカーソル操作したりマウスドラッグ操作などでTextBox上の文字列の一部あるいはControl+Aでの全選択はどのようにしますか?ハイフンを跨いだ選択範囲だった場合選択範囲にハイフンが含まれているかのような表示にしますか? つまりコピーの際にハイフンをコピー対象に含めるかという質問です。 * フォーカス移動時のカーソル位置 あらかじめ"1"を入力していて一旦フォーカスを移動してから再度フォーカスを戻して"2"を入力した場合にカーソル位置はどのようにするのが期待ですか?初期位置でしょうか?それとも"1"の後ろでしょうか? * カスタマイズ 以上のようなコントロールの振る舞いは固定的ですか?それともカスタマイズプロパティーを用意したりしますか? ごちゃごちゃと書いてしまってすみません。なんとなく予想は付くのですが一応確認してみました。自分が思うとおりの仕様だとするとTextBoxをそれなりにカスタマイズ(キー入力イベントやフォーカス遷移)することになる気がしました。