Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

VB.NET2003 テキストボックスに半角英数字以外入力させない

お世話になります。 初めてコーディングを行っておりますが、 文字制御についてわからないのでご享受ください。 IMEの設定 Alphaになっているテキストボックスがあります。 こちらに、直接入力や、貼り付けなどで、 全角文字、半角カナが入力されないようにするにはどうしたらよろしいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ImeModeはOffの方がいいように思います キー入力に関しては TextBoxのKeyDownイベントで if e.KeyCode = Keys.ProcessKey then   e.Handled = true   TextBox1.ImeMode = ImeMode.Off else if e.Keycode = Key.Insert then   ' キーボードによる貼り付け操作   if e.shift then     e.Handled = true   end if End if といった具合で処理出来そうです マウスの右クリックのコンテキストメニューの対策は ContextMenuをFormに貼り付けてメニュー項目は何も設定しません Form_Loadイベントなどで TextBox1.ContextMenu = ContextMenu1 といった具合に設定します …

happydonky
質問者

お礼

返事遅れましたが、なんとか実行できました。 ありがとうございました。

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

その他の回答 (2)

回答No.3

No.2です。 すみません、書いてから気が付いたんですが、 キャレットを後端に移動している部分は、文字列の途中に文字を差し込もうとした時にマズイですね(汗) その辺は、適当にアレンジお願いします。

happydonky
質問者

お礼

返事遅れましたが、なんとか実行できました。 大変参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

当方、VS2005で確認しました。同じだとは思いますがご了承ください。 まず、IMEModeはDisableがいいと思います。Offだと起動できるので。 で、あまりうまい方法では ないかもしれませんが、以下のような感じで 一応いけるはずです。 以下では、入力(貼り付け)されて指定以外の文字があったら、入力(貼り付け)直前の状態に戻します。 ----- Public Class Form1 Private prevText As String = "" '変更前テキスト保存用 Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If TextBox1.TextLength > 0 Then '何か入力されていたら処理 For i As Integer = 0 To TextBox1.TextLength - 1 Select Case Asc(TextBox1.Text.Substring(i, 1)) '1文字ずつ文字コードチェック Case 48 To 57, 65 To 90, 97 To 122 '半角数値、アルファベット大文字・小文字なら何もしない Case Else '上記以外なら、直前に憶えていたテキストに戻してチェック終了 TextBox1.Text = prevText Exit For End Select Next End If TextBox1.Select(TextBox1.TextLength, 0) 'キャレットをテキスト後端に prevText = TextBox1.Text '現状のテキストを憶える End Sub End Class ----- 文字列が長いと、ちょっと厳しいかもしれませんが…

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

関連するQ&A