Top > プログラミング > .NET Tips> TextBoxに数字しか入力できないようにする

TextBoxに数字しか入力できないようにする」への評価、コメント

評価

良い / 悪い = 159 / 17 (「良い」の割合 = 0.903 , 人気度 = 2.028

評価する

コメント一覧


通常のコメント
匿名 2022/12/8 (Thu) 13:52:24
> (VB.NETでは「e.KeyChar < "0"c Or e.KeyChar > "9"c」)の条件式は、「!Char.IsDigit(e.KeyChar)」(VB.NETでは「Not Char.IsDigit(e.KeyChar)」)とすることもできます。

Char.IsDigit(e.KeyChar) は、全角数字でもtrue (.NET 4.8) なので、置き換えはできないようですね。
(.NETのバージョンによるのかはちょっとわかりません。)
Char.IsDigitはドキュメント的にも「Unicodeキャラクタが十進数の数字か」という書き振りなので全角でも受け付けてるのだと思います。

通常のコメント
ArtisticMagic 2020/12/7 (Mon) 06:45:47
テキストボックスの文字列を正規表現置換で、数字だけに置換すればできそうですが、いかがでしょうか?

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

TextBox1.Text = System.Text.RegularExpressions.Regex.Replace(TextBox1.Text, "[^0-9]", "")

End Sub

通常のコメント
管理人 2014/10/18 (Sat) 00:10:08
> Visual Basic 2013だと最初のKeyPressイベントによる方法のソースだけでIME全角入力でも貼り付けでも数字以外入力できなくなってます。

ご報告、ありがとうございます。私もWindows 8.1、Visual Studio 2013(.NET Framework 4.5.1)で試してみたところ、全角の入力と、V+Ctrlキーによる貼り付けができませんでした。しかし、Insert+Shiftキーや、コンテキストメニューでの貼り付けはできてしまいました。Ctrlキーとアルファベットのキーを同時に押した時、KeyCharの値は、Aの時が1、Bの時が2となり、Vの時は22になるようです。ですので、V+Ctrlキーで貼り付ける時、貼り付ける文字列がすべて数字なら貼り付けを許可するということが、KeyCharが22かどうかを調べることでできそうです。

通常のコメント
にゃかむりゃー 2014/10/8 (Wed) 09:53:31
Visual Basic 2013だと最初のKeyPressイベントによる方法のソースだけでIME全角入力でも貼り付けでも数字以外入力できなくなってます。

通常のコメント
管理人 2014/08/19 (Tue) 23:03:15
> 「IMEのオン、クリップボードからの貼り付けを防ぐ」のサンプルコードにtypoがあります。
>
> 1行目のImports文の末尾に「;」があります。
> Imports System.Windows.Forms;

修正します。ご報告、ありがとうございました。

通常のコメント
@koichi0814 2014/06/26 (Thu) 11:25:24
「IMEのオン、クリップボードからの貼り付けを防ぐ」のサンプルコードにtypoがあります。

1行目のImports文の末尾に「;」があります。
Imports System.Windows.Forms;

通常のコメント
管理人 2014/06/2 (Mon) 02:09:55
> 「IMEのオン、クリップボードからの貼り付けを防ぐ」の説明の3行目に誤字があります。

ご報告ありがとうございました。修正させていただきます。

> 掲示板の No32209 から始まるスレッドで話題になりましたが、ここで紹介されている C# 版の NumericTextBox の実装を用いた場合、Visual Studio のデザイナから使用できない問題があるようです。

とりあえず、AllowKeyCharsプロパティをメソッドにすることにしました。ご報告ありがとうございました。

通常のコメント
魔界の仮面弁士 2014/03/25 (Tue) 10:27:26
掲示板の No32209 から始まるスレッドで話題になりましたが、ここで紹介されている C# 版の NumericTextBox の実装を用いた場合、Visual Studio のデザイナから使用できない問題があるようです。

通常のコメント
匿名 2014/03/23 (Sun) 01:59:51
「IMEのオン、クリップボードからの貼り付けを防ぐ」の説明の3行目に誤字があります。

「ここでは、数字のみで構成された文字列がクリップボードにあるときは貼り付けでき"ない"ようにしています。」

「ここでは、数字のみで構成された文字列がクリップボードにあるときは貼り付けでき"る"ようにしています。」
だと思います。

評価の理由
地獄のひこにゃん 2013/08/10 (Sat) 23:24:57
評価:悪い
vb.netのテキストに数値しか入力させないやつをコピペして実行してみた

deleteはいけるけどbackspaceが使えないような

通常のコメント
sgwr33 2012/07/30 (Mon) 16:24:23
今更ながらVB6から移行して
再学習しております。
先人様の知恵、お借りできて
恐縮です。

評価の理由
匿名 2012/07/26 (Thu) 18:02:33
評価:良い
有難うございます。助かりました。

通常のコメント
匿名 2012/07/21 (Sat) 11:59:38
いつも参考にさせていただいてます。
数値入力のみの方法とのことですが、MaskedTextBoxつかって、「Mask」プロパティに「999,999,999」(例えば金額、カンマつき)とか設定する方法もあるのではないでしょうか。
大概右寄せなので、「RightToLeft」「TextAlign」プロパティを使えば調整できますし。

評価の理由
オヤヂ 2012/04/24 (Tue) 20:56:58
評価:良い
事あるごとに・・・と言うのは大げさでしょうか?
でも、大いに助かっています。いつも、ありがとうございます。

通常のコメント
lonsamcowboy 2010/12/25 (Sat) 19:04:13
テキストボックスに実数しか入力できないようにするにはどうすればいいですか?

評価の理由
まけろう 2010/12/7 (Tue) 16:20:00
評価:良い
とても助かります。

評価の理由
EC 2010/10/8 (Fri) 10:57:04
評価:良い
同じ手法で、これ以外の制限もできるので、ずいぶん参考になりました。
ありがとうございます。

評価の理由
まねきん 2010/08/1 (Sun) 18:18:07
評価:良い
やり方だけでなく目的をわかりやすく示されていて
非常にいいです
これからも拝見させて頂きます
がんばってください

通常のコメント
管理人 2010/07/8 (Thu) 01:42:15
> 入力の瞬間のイベントから規制するのではなく、
> 入力後のテキストボックスの値をニューメリックチェックするべきです。

その点は記事の頭で「注意」として指摘しているのですが...。

> コピペで数字を貼り付けるユーザーさんを排除したら不親切。

少なくとも私の紹介したサンプルでは、数字の貼付けを排除しておりませんが...。

> IMEで変換して半角の数字を入力するパターンもあるし。

私の記事では、KeyPressイベントで数字の入力を防いでもIMEで入力できることを指摘し、その対処法を紹介しておりますが、実際にIMEを無効にするか否かはお読みになった方がご自分の都合に合わせてお決めになるべきだと考えております。

多分こてつさんのおっしゃりたいことは、「TextBoxに数字しか入力できないようにする方法を紹介するのはナンセンスだからやめるべきだ」ということなのだろうと想像しております。それは一つの考え方としては正しいかもしれませんが、一方で、どうしても必要だという方も多くいらっしゃいます。そのような方々のためにも、問題点をはっきりさせた上で対処法を紹介することは必要だと私は思います。

通常のコメント
こてつ 2010/07/7 (Wed) 21:33:01
2006年3月16日 15:44:22の匿名さんも言ってるけど、
コピペで数字を貼り付けるユーザーさんを排除したら不親切。
IMEで変換して半角の数字を入力するパターンもあるし。
入力の瞬間のイベントから規制するのではなく、
入力後のテキストボックスの値をニューメリックチェックするべきです。

評価の理由
ava 2010/03/10 (Wed) 15:57:10
評価:良い
非常に役に立った

評価の理由
qiu 2010/02/3 (Wed) 18:30:05
評価:良い
very good

評価の理由
IT農民工 2009/05/25 (Mon) 14:32:12
評価:良い
If KeyAscii = vbKeyBack Or KeyAscii = vbKeyReturn Then Exit Sub
If Not Chr(KeyAscii) Like "[0-9]" Then
KeyAscii = 0
End If

評価の理由
匿名 2009/04/16 (Thu) 16:19:28
評価:良い
分かりやすいですね

評価の理由
直之介 2008/10/15 (Wed) 09:53:38
評価:良い
いろんなヒントがあり、問題解決の糸口がつかめました。

評価の理由
VB.NET必須 2007/07/5 (Thu) 09:37:59
評価:良い
VB.NETでお仕事をしてるものとしてはありがテーです。

評価の理由
Yuki 2006/11/18 (Sat) 16:18:49
評価:良い
この様な、簡単だけどどうするの ? といった事柄は、参考文献を捜しても殆ど出ていません。VB6 では簡単にできても C# では ?? なことが結構有りますね。
本当に助かりました。

通常のコメント
匿名 2006/03/16 (Thu) 15:44:22
悪いとは言わないけど、この手のチェックはValidatingで行うように広めてほしい。貼り付け防げないでしょ。

評価の理由
rr 2005/11/25 (Fri) 15:51:52
評価:良い
非常に役に立ったので

評価の理由
sanoari 2005/06/16 (Thu) 10:51:40
評価:良い
丁度、入力でNumericチェックをどうしようか悩んでいたところ、このページを見つけました。ほとんどそのままのコピーでうまくいきました。有難うございました。

評価の理由
住友徹 2004/09/1 (Wed) 16:24:54
評価:良い
数だけ入力する方法を探していたところ,このページを見つけました.組み込んでみたところ,うまくいきました.ありがとうございました.

評価の理由
木内 2003/12/19 (Fri) 09:45:41
評価:良い
サンプルコードがのっていてわかりやすい

通常のコメント
管理人 2003/09/4 (Thu) 02:38:01
確かにこれではだめですね。修正します。

通常のコメント
みそ 2003/09/3 (Wed) 10:36:11
許可する文字を追加する場合、

If e.KeyChar < "0"c Or e.KeyChar > "9"c Or e.KeyChar <> vbBack Then

となっていますが

If (.KeyChar < "0"c Or .KeyChar > "9"c) And Not .KeyChar = vbBack Then

ではないでしょうか?

コメントの投稿

[説明]