• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定の文字を、入力文字数に含めない方法は(VB.NET))

特定の文字を入力文字数に含めない方法は?

このQ&Aのポイント
  • VB.NETにて特定の文字を、入力文字数に含めないようにするにはどのような処理を行ったらよいのでしょうか?
  • TextBox.KeyPressイベントを使用して、特定の文字が入力された場合に文字数を減らす処理を行うことができます。
  • しかし、TextBoxクラスにはTextLengthというパブリックメンバは存在しないため、エラーが発生しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

そのような特殊な方式でしたら入力されたものの文字数をカウントする(けど特殊文字は除く)クラスを新たに作るとか、MaxLengthを修正しするとかで自分でクラスを作りなおすしかないでしょう。 ただ目的はカウントをされなくするのではなく、特殊文字を除いた最大入力文字数の制限なんですよね? それだけなら大げさに作りこむことは無いと思うので、文字数のカウントを確認ボタンが押された時に行うとか(これならその時点のテキストボックスの文字数をカウントして特定文字が入っていたらマイナスするだけ済みます)、キーイベントで見張るならキーイベントが発生する度に毎回特殊文字を除いた文字数をカウントするとかの処理で間に合うかと思います。 特殊文字を除いた文字数のカウントは色々な方法がありそうですが、例えば入力文字列からreplaceで特定文字を置き換えてカウントするとか、一文字ずつチェックするとかでしょうかね。

noname#31652
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

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

noname#31652
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • クラスやモジュールで纏める方法ありますか?

    説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_2.KeyPress If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub Private Sub TextBox1_4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_4.KeyPress If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then e.Handled = True End If If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub Private Sub TextBox1_5_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_5.KeyPress If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack And e.KeyChar <> ","c Then e.Handled = True End If If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub 上記のプログラム、TextBox○○○_5.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、ほかのクラスやモジュールにまとめる方法ってありませんか? よろしくお願いしますm(__)m

  • VB2005 TextBoxの入力制限について

    はじめて質問させていただきます。 現在、VB2005を使ってプログラムを組んでいるのですが、半角カタカナだけをTextBoxに入力し、表示する方法がわかりません。 Private Sub TextBox6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox6.KeyDown TextBox6.ImeMode = Windows.Forms.ImeMode.KatakanaHalf End Sub Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress If (e.KeyChar < "ア"c Or e.KeyChar > "-"c) And e.KeyChar <> vbBack Then e.Handled = True End If End Sub ↑見にくいかもしれませんがコードです。 この方法ではだめなのでしょうか? 回答をお願いします

  • 数字のみの入力制限をかけたTextBoxで、"."の入力も許可したい

    環境はVB.NETです。 以下のコードで、TextBoxへの入力を、0~9の数字のみ(BackSpaceも許可)に制限していますが、"."(少数点)の入力も許可したいです。 e.KeyChar = "."c の判定をIf文に追加してみましたが、実現できませんでした。 ご教授いただけると幸いです。 よろしくお願いします。 Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress  If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then   e.Handled = True  End If End Sub

  • TextBoxへ文字列をD&Dをする方法を教えてください。

    Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text)(0) End Sub VB.NETで上記のような方法でドラッグされたテキストを テキストボックスに表示するようにしたいのですが、 この方法だと最初の一文字しかドロップされません。 どこか修正箇所などありましたら、ご教示いただけると助かります。

  • 【プログラミング】ショートカットキーの設定について

    KeyPress イベントプロシージャの設定で Private Sub Button1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Button1.KeyPress If e.KeyChar(Keys.F) Then End If End Sub この中にボタン1の命令をさせたいとき、どのように書けばいいんでしょうか? Visual Basic 2010です コードを教えてください、お願いします

  • 簡単なプログラムにまとめる方法

    前回、同じようなプログラムを簡単にまとめる方法を教えて頂いたのですが新しい事で困ってしまいました。 説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus Me.TextBoxNum.Text = "1" End Sub Private Sub TextBox2_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2_1.GotFocus Me.TextBoxNum.Text = "2" End Sub Private Sub TextBox3_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3_1.GotFocus Me.TextBoxNum.Text = "3" End Sub 上記のプログラム、TextBox○○○_1.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、以下のプログラムで纏めたのですが、 Me.TextBoxNum.Text = "○○○" にフォーカスされたTextBox○○○_1の○○○を入れる方法はありますか? Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus,TextBox2_1.GotFocus,TextBox3_1.GotFocus Me.TextBoxNum.Text = "○○○" End Sub 説明が下手くそでスイマセン、ほかに新しい方法でも有ればお願いします よろしくお願いしますm(__)m

  • VisualBasic.NETでのソースの意味がわかりません…。

    Dim misscount As Integer Dim istypemode As Boolean Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim s() As String = New String() {"datemasamune", "sanadayukimura", "tyousokabemototika", "morning", "hyper", "newspaper"} Dim word As String = s(New Random().Next(0, s.GetUpperBound(0) + 1)) Label1.Text = word Label2.Text = "" istypemode = True End Sub Private Sub Form1_keypress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If istypemode And Not Char.IsControl(e.KeyChar) Then If e.KeyChar = Label1.Text.Chars(Label2.Text.Length) Then Label2.Text &= e.KeyChar End If End If End Sub ------------- 以上のソースがあるのですが、どこでどうなっているというのを教えてほしいです。 もし意味不明な部分とかありましたら教えてください。

  • ↓Downキーでフォーカスの移動ができません。

    ご多忙中申し訳ありません。 TextBoxが複数ありまして、↓キーを使用してフォーカスの移動をタブインデックスに従って変更したいのですが、Enterキーなら順番に移動しますが、Downキーですと何も変化がありません。 Downキーの場合は何か、コードの追加が必要でしょうか? あと、できれば←や↑ →なども使用してフォーカスの移動をしたいとおもいますが アドバイスをお願いします。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.KeyPreview = True End Sub Private Sub Form1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If e.KeyChar = Chr(Keys.Down) Then  '←ここの部分がEnterキーならフォーカスの移動ができます。 Me.SelectNextControl(Me.ActiveControl, True, True, True, True) e.Handled = True End If End Sub 申し訳ありません。宜しくお願いします。

  • Mid関数

    VB6.0とVB.NETのMid関数についてなんですが、例えば.NETで次のように書く時、 Label2.text = "abcdefg" Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If Mid(Label2.Text, z, 1) = e.KeyChar Then   Mid(Label2.Text, z, 1) = " " End if と.NETでは書けるのですが、VB6.0では、まずKeyPressの()の中が違うし、Midの()の中の「Label.Text」を「Label2.Caption」と書くと 「.Caption」のところで「変数が必要です」とエラーが出てしまいます。 これはどういうことなのか、教えてください。

  • 重複した文字列をカウントして取り出したい

    初めて質問させていただきます。 VB初心者です。 ソートされた文字列の書き込まれたファイルを読み、 (文字列は、 ”000” ”001” ”001” ”001” ”002” ”002” ”003” といったように書き込まれています。) そこから、3つ連続して並んでいる文字列を探し出して、 その文字列と、3つ連続していた文字列がいくつあったのか表示するプログラムを作りたいのですが、 どうにも処理速度が遅く、さらに行数が1万を超えると、応答なしになってしまいます。 どなたか、上手い処理の方法があれば、ぜひともご教授の程をお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.FileName = "" OpenFileDialog1.InitialDirectory = "c:\" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then TextBox1.Text = My.Computer.FileSystem.ReadAllText _ (OpenFileDialog1.FileName, System.Text.Encoding.Default) End If End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim x As Integer Dim xyz As Integer '行数を調べる。 Dim i As Integer = TextBox1.Lines.Length TextBox2.Text = (i - 1 & "行") MessageBox.Show("一時停止") For ix = 0 To i - 2 '1行目と2行目を比較 If TextBox1.Lines(x) = TextBox1.Lines(x + 1) Then '2行目と3行目を比較 If TextBox1.Lines(x + 1) = TextBox1.Lines(x + 2) Then '3つある番号を記入。 TextBox2.Text = TextBox2.Text + vbCrLf + TextBox1.Lines(x + 2) '3回重複したことをカウント。 'MessageBox.Show("3発見") xyz = xyz + 1 Else End If Else End If '調べる行を+1 x = x + 1 Next TextBox2.Text = TextBox2.Text + vbCrLf + ("3つ以上は、" & xyz & "個") End Sub Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub End Class