![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_09.png?e8efa67)
VB.NETにて特定の文字を、入力文字数に含めないようにするにはどのような処理を行ったらよいのでしょうか?
以下は実際に試みた方法です。「型 'TextBox' でパブリック メンバ 'TextLength' が見つかりません。」というエラーがおきました。
Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress
'マイナスかドットであるか判定
If e.KeyChar = "-" OrElse e.KeyChar = "." Then
sender.TextLength = sender.TextLength - 1
End If
End Sub
No.2ベストアンサー
- 回答日時:
そのような特殊な方式でしたら入力されたものの文字数をカウントする(けど特殊文字は除く)クラスを新たに作るとか、MaxLengthを修正しするとかで自分でクラスを作りなおすしかないでしょう。
ただ目的はカウントをされなくするのではなく、特殊文字を除いた最大入力文字数の制限なんですよね? それだけなら大げさに作りこむことは無いと思うので、文字数のカウントを確認ボタンが押された時に行うとか(これならその時点のテキストボックスの文字数をカウントして特定文字が入っていたらマイナスするだけ済みます)、キーイベントで見張るならキーイベントが発生する度に毎回特殊文字を除いた文字数をカウントするとかの処理で間に合うかと思います。
特殊文字を除いた文字数のカウントは色々な方法がありそうですが、例えば入力文字列からreplaceで特定文字を置き換えてカウントするとか、一文字ずつチェックするとかでしょうかね。
「その時点のテキストボックスの文字数をカウントして特定文字が入っていたらマイナスする」という部分非常に参考になりました!
早速その考えを使ってやったところうまくいきました。
ちなみに、InStr関数を使って特定の文字が検出されるようであれば文字数(TextLengthを代入した変数)を-1するという方法をとりました。文字数制限に関してはMaxLengthは使わず、キーイベント時に文字数を判定するようにしました。
どうもありがとうございました!
No.1
- 回答日時:
何をしようとしたいかは分かるのですが根本的に間違っています。
TextLengthはテキストボックスのプロパティでそのテキストボックス内の文字数が入っています。テキストボックスに入っている文字"数"を-1にするという処理は意味不明です。まぁそもそもこういう項目は読み取り専用ですのでそういう処理で使うところではありません。
しいて行うならテキストボックスに入っている文字列を抜き出してその文字列の一番右端を削ってまた元に戻すというような処理になりますが、キープレスイベントをキャンセルするという方法がスマートだと思います。
KeyPressイベントをキャンセルするには下記のようにします。
e.Handled = True
すばやいご回答ありがとうございます。読み取り専用ということですか。納得いきました。
キープレスイベントをキャンセルするということですが、それですと入力自体もされないということになりませんか?
入力されてかつ文字数に含まれない方法をとりたいのです。
たとえば、数値を入力するテキストボックスには制限文字数(MaxLength)をもうけてあり、そこへ入力する際に「-」や「.」は文字数として含まれないという方法です。
そもそもMaxLengthプロパティを使用しているのが間違いなのでしょうか?
発想を変えて、キープレスイベントの際に制限文字数を判断する方法をとる以外はないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
VBでの入力値制限について
Visual Basic(VBA)
-
VBでの簡易電卓の作成(減算方法)で困っています。
Visual Basic(VBA)
-
VB.NETでコンボボックスの1行目を空白にしたい
Visual Basic(VBA)
-
-
4
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
5
テキストボックス行の桁数を制限したいです VB.NET
Visual Basic(VBA)
-
6
VB初心者。小数点以下の表示でつまづいています(2
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
リョウ・・・量?料?
-
FFTの結果ついて
-
お家デートをしててハグを長い...
-
メルカリのメルカードで買い物...
-
月度は何て読みますか?
-
取り消し線が入った文字を削除...
-
エクセルで、日付を入力すると...
-
NULLを含むフィールド値の条件分岐
-
VBの質問#if 0 then ってどう...
-
処理の実行中にOutLookがまとも...
-
UMLでの例外処理
-
C言語switch文のcase記述について
-
VBA Call BeforeDoubleClick(By...
-
VBAでループ内で使う変数名を可...
-
IQテストの数列
-
VBA DO LOOP Do loopをつかって...
-
生活保護受給者は性欲をどんな...
-
1〜100の中で if(2の倍数) else...
-
タッチパッドはチャタリングは...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
DoEventsがやはり分からない
-
switch の範囲指定
-
メルカリのメルカードで買い物...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
VBAでCOPYを繰り返すと、処理が...
-
EXCEL VBA マクロ 実行する度に...
-
findは動くがfindnextがマクロ...
-
インタラクティブの反対語は?
-
UMLでの例外処理
-
リョウ・・・量?料?
-
Do~Loopした回数をカウントしたい
-
セックスレスの既婚女性は自慰...
-
月度は何て読みますか?
-
セルの値が0はクリアするマクロ
-
Loadイベント中にほかのイベン...
-
FFTの結果ついて
おすすめ情報