ちょっとサンプル等を作れる環境にないので、方向性とヒントだけ。
ご質問の内容ですが、おそらく「TextBoxのKeyPressイベントで文字のチェックを行い、数字以外をキャンセルする」という方針ですね?(KeyPressイベントで処理している、といったことはできれば質問文に書いてください。あなたの環境を我々は見られないので、このプログラムの断片が一体どういう所にあるのかすらわかりません)。
この場合だと、確かに数字以外は一切はじいてしまいます。かろうじてバックスペースは除外されているようですが、それ以外の特殊な入力は全滅ですよね。
この手の場合、テキストボックスを張り付けたForm側ではなく「文字制限機能を持った特別なTextBoxを、自分で作る」という方針にすれば細かいところまで制御できるようになります。具体的には、TextBoxを継承して、独自のチェック処理を追加する、ということになります。
この時点で「継承って何?」という状況であれば申し訳ないのですがここでは説明しきれないのでご自分でもう少し勉強してみてください。
で、継承を使った場合ですが
- イベント処理を今のように書くことはできないので、TextBox内部でKeyPressイベントを起こす「OnKeyPress」メソッドをオーバーライドして、そこに例示された「数字意外をはじく」処理を入れる。
- Windowsのキーやマウス操作があると必ず通過する「WndProc」メソッドをオーバーライドし、そこでWindowsが受け取った「WM_PASTEメッセージ」を識別して、コピー&ペーストで入力された文字が来た場合に数字以外をはじく処理を記述する。
こういう方針で作れば確かお望みのTextBoxを作れます(たしか……)。具体的なコードについてはおそらく例示してくれているサイトがあるとおもうので、「WndProc」や「数字のみ」といったキーワードで検索してみればサンプルが出てくると思います。
そのままサンプルを張り付けて使うのは危険なので、きちんと自分で何が起きているかを理解して使ってみてください。
前半にも書きましたが「継承ってなに?」「オーバーライドって何?」という疑問をお持ちの場合はもう少し勉強が必要ですので、そこは自力でやってみてくださいな。
ではでは。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/23 06:08