スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WPFで数字のみ入力可能なTextBox

  • 2016/01/22 01:29
  • Category: WPF
数字のみ入力できるTextBox用ビヘイビアを作ってみました。





半角数字以外の文字入力を禁止するため、以下のような処理をしています。


1.数字以外の半角文字
PreviewTextInputイベントで正規表現にマッチしなければ拒否しています。
ただし半角スペースを入力したときにはPreviewTextInputが発生しないので、代わりにPreviewKeyDownで検知してます。
wpf - Why does PreviewTextInput not handle spaces? - Stack Overflow


2.全角文字
InputMethod.SetIsInputMethodSuspendedでtrueを指定してIMEを無効化すればいいようです。


3.貼り付け
DataObject.AddPastingHandlerで貼り付け時(Pastingイベント)のイベントハンドラを登録、数字以外の文字が含まれているときにキャンセルしています。


4.再変換
https://social.msdn.microsoft.com/Forums/ja-JP/27e12b0d-8ba9-4db6-8b10-28807668af77/textbox?forum=wpfja
>WPFのTextBoxだと、入力済み文字列を選択してスペースを押す事で再変換等もされます。
上でSetIsInputMethodSuspendedを使ってIMEをOFFにしているのでスペースを押したときの再変換はされませんが、TextBoxのコンテキストメニューには再変換候補がしっかり表示されてしまうため.xamlの方でTextBox.ContextMenuを書き換えて対処しています。


普通に使う分にはこれで問題ない・・・と思います。
といってもキーボード以外のデバイス(手書き入力、音声入力、タッチキーボードなど)を使えば数字以外を入力できてしまいます。
一応対処しようとしたのですが、検証中に謎の例外やエラーでクラッシュすることが多々あり、正直諦めました。
(InputMethod.SetIsInputMethodSuspendedでtrueを設定して手書き入力すると落ちる?)


補足
Extended WPF ToolkitのIntegerUpDownはアルファベットも全角文字も入力できますが、フォーカスが外れたときに内容をチェックして、数字以外の文字が含まれていると入力前の値に巻き戻すといった動作をするらしく。
TextBoxでもTextChangedで同様の処理をすれば、手書き入力等に対応できるかもしれません。
スポンサーサイト

Pagination

Trackback

Trackback URL

http://someprog.blog.fc2.com/tb.php/14-9fdf5284

Comment

Post Your Comment

コメント登録フォーム
公開設定

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。