dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

そのような特殊な方式でしたら入力されたものの文字数をカウントする(けど特殊文字は除く)クラスを新たに作るとか、MaxLengthを修正しするとかで自分でクラスを作りなおすしかないでしょう。



ただ目的はカウントをされなくするのではなく、特殊文字を除いた最大入力文字数の制限なんですよね? それだけなら大げさに作りこむことは無いと思うので、文字数のカウントを確認ボタンが押された時に行うとか(これならその時点のテキストボックスの文字数をカウントして特定文字が入っていたらマイナスするだけ済みます)、キーイベントで見張るならキーイベントが発生する度に毎回特殊文字を除いた文字数をカウントするとかの処理で間に合うかと思います。

特殊文字を除いた文字数のカウントは色々な方法がありそうですが、例えば入力文字列からreplaceで特定文字を置き換えてカウントするとか、一文字ずつチェックするとかでしょうかね。
    • good
    • 0
この回答へのお礼

「その時点のテキストボックスの文字数をカウントして特定文字が入っていたらマイナスする」という部分非常に参考になりました!
早速その考えを使ってやったところうまくいきました。
ちなみに、InStr関数を使って特定の文字が検出されるようであれば文字数(TextLengthを代入した変数)を-1するという方法をとりました。文字数制限に関してはMaxLengthは使わず、キーイベント時に文字数を判定するようにしました。

どうもありがとうございました!

お礼日時:2006/04/11 15:40

何をしようとしたいかは分かるのですが根本的に間違っています。


TextLengthはテキストボックスのプロパティでそのテキストボックス内の文字数が入っています。テキストボックスに入っている文字"数"を-1にするという処理は意味不明です。まぁそもそもこういう項目は読み取り専用ですのでそういう処理で使うところではありません。
しいて行うならテキストボックスに入っている文字列を抜き出してその文字列の一番右端を削ってまた元に戻すというような処理になりますが、キープレスイベントをキャンセルするという方法がスマートだと思います。
KeyPressイベントをキャンセルするには下記のようにします。

e.Handled = True
    • good
    • 0
この回答へのお礼

すばやいご回答ありがとうございます。読み取り専用ということですか。納得いきました。
キープレスイベントをキャンセルするということですが、それですと入力自体もされないということになりませんか?
入力されてかつ文字数に含まれない方法をとりたいのです。
たとえば、数値を入力するテキストボックスには制限文字数(MaxLength)をもうけてあり、そこへ入力する際に「-」や「.」は文字数として含まれないという方法です。
そもそもMaxLengthプロパティを使用しているのが間違いなのでしょうか?
発想を変えて、キープレスイベントの際に制限文字数を判断する方法をとる以外はないのでしょうか。

お礼日時:2006/04/11 13:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!