質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

13907閲覧

数値のみのテキストボックスでCtrl+Cなどのショートカットキーを有効にしたい

_ali

総合スコア14

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2018/08/23 05:32

数値のみのテキストボックスをフォームに作成しています。
以下のようなコードで一応実装はできるのですが、Ctrl+cなどのショートカットは無効になってしまいます。
ショートカットは生かしておきたいのですが良い方法はありませんか?
よろしくお願いします

vb

1If (e.KeyChar < "0"c OrElse e.KeyChar > "9"c) Then 2 'バックスペースでなかったら 3 If e.KeyChar <> vbBack Then 4 5 e.Handled = True 6 7 End If 8 9 End If

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

KeyPressでCtrlを押している状態を知りたい
こちらが参考になるかと思います。

投稿2018/08/23 05:59

YAmaGNZ

総合スコア10268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_ali

2018/08/23 06:08

ありがとうございます。 イベントをそのまま利用することもできるのですね。 こちらも参考にします!
guest

0

ベストアンサー

ちょっとサンプル等を作れる環境にないので、方向性とヒントだけ。

ご質問の内容ですが、おそらく「TextBoxのKeyPressイベントで文字のチェックを行い、数字以外をキャンセルする」という方針ですね?(KeyPressイベントで処理している、といったことはできれば質問文に書いてください。あなたの環境を我々は見られないので、このプログラムの断片が一体どういう所にあるのかすらわかりません)。

この場合だと、確かに数字以外は一切はじいてしまいます。かろうじてバックスペースは除外されているようですが、それ以外の特殊な入力は全滅ですよね。

この手の場合、テキストボックスを張り付けたForm側ではなく「文字制限機能を持った特別なTextBoxを、自分で作る」という方針にすれば細かいところまで制御できるようになります。具体的には、TextBoxを継承して、独自のチェック処理を追加する、ということになります。

この時点で「継承って何?」という状況であれば申し訳ないのですがここでは説明しきれないのでご自分でもう少し勉強してみてください。

で、継承を使った場合ですが

  • イベント処理を今のように書くことはできないので、TextBox内部でKeyPressイベントを起こす「OnKeyPress」メソッドをオーバーライドして、そこに例示された「数字意外をはじく」処理を入れる。
  • Windowsのキーやマウス操作があると必ず通過する「WndProc」メソッドをオーバーライドし、そこでWindowsが受け取った「WM_PASTEメッセージ」を識別して、コピー&ペーストで入力された文字が来た場合に数字以外をはじく処理を記述する。

こういう方針で作れば確かお望みのTextBoxを作れます(たしか……)。具体的なコードについてはおそらく例示してくれているサイトがあるとおもうので、「WndProc」や「数字のみ」といったキーワードで検索してみればサンプルが出てくると思います。

そのままサンプルを張り付けて使うのは危険なので、きちんと自分で何が起きているかを理解して使ってみてください。

前半にも書きましたが「継承ってなに?」「オーバーライドって何?」という疑問をお持ちの場合はもう少し勉強が必要ですので、そこは自力でやってみてくださいな。

ではでは。

投稿2018/08/23 05:55

backyard

総合スコア534

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_ali

2018/08/23 06:04

回答ありがとうございます。 確かに言葉不足でしたね。すみません。 お察しのとおり、KeyPressイベントで処理を行っています。 自作でテキストボックスを作るということですね。 いろいろと調べてはいたのですが、行き先を見失っていたので助かりました。 示してくれた方針に沿って作ってみます。 ありがとうございました!
backyard

2018/08/23 06:14

ちょいと時間が取れたので試してみました。y_waiwaiさんの回答にあるように、KeyPressでe.ModifiersでKeys.Controlかどうか、といった条件をみてもいけそうですよ。そのほうが手軽だと思うのでそちらも見てみてください。
YAmaGNZ

2018/08/23 06:19

ペーストへの対応等本格的にやるのであれば、TextBoxを継承したほうがいいとは思います
backyard

2018/08/23 06:25

さみだれでごめんなさい。確かに、ペーストには「マウス右クリック→貼り付け」などもあり、KeyPressだけでは対応しきれないパターンがあるので、継承してWndProcで「キーだろうが何だろうが、ペーストされたら……」という対応をとっていたのを忘れていました。
_ali

2018/08/23 06:27

お二人ともありがとうございます。 .net+数字のみ+カスタムコントロール 上記のキーワードで検索して出てきたサイトを参考に無事解決しました。
guest

0

KeyDown イベントに記述して、Ctrl+Cも条件に入れる、でいけるんじゃ

投稿2018/08/23 05:53

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問