DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストボックスでのキー入力文字置換

環境/言語:[VB.NET2003]
分類:[.NET]

テキストボックスのKeyPressイベントで小文字のaを入力されたら大文字のAに
置き換えたいのですがなにかいい方法ないですか?

以下ではだめでした。(当然だめですが...)
Private Sub Text1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Text1.KeyPress

If e.KeyChar = "a" Then
e.KeyChar = "A"
End If

End Sub
大文字の英字のみ入力したいのでCapsLockキーを押さなくても
小文字の英字ならば、大文字の英字に置き換えたいんです。
■No15045に返信(h@koさんの記事)
> テキストボックスのKeyPressイベントで小文字のaを入力されたら大文字のAに
> 置き換えたいのですがなにかいい方法ないですか?
> 以下ではだめでした。(当然だめですが...)

そもそも、A 〜 Z 全部対応するにおいて、このやり方はできるにしても非効率ですよね。

色んな方法があります。
多少チラついても良いのであれば、TextChanged イベントで String.ToUpper メソッドを実行。
もっと前に実装したいのであれば、派生クラスの WndProc にて WM_CHAR を補足する方法もありますね。
正しくは IsInputChar メソッドのオーバーライドにあたると思いますが。

どちらにしても変換自体は String.ToUpper メソッドが良いでしょう。

___________________________________________________________________________________
じゃんぬ - Microsoft MVP for Visual Developer C#
  C#, VB.NET 入門  http://jeanne.wankuma.com/
  じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
#本題の件はそのやり方で実現してくださいね。

TextBox.CharacterCasingプロパティで一発です。
回答ありがとうございます。

> 色んな方法があります。
> 多少チラついても良いのであれば、TextChanged イベントで String.ToUpper メソッドを実行。

この方法でうまくいきました。TextChanged イベントで
 Text1.Text = Text1.Text.ToUpper
しかし、カーソルが文字列の最初に戻ってしまうんで、文字列の最後に
カーソルがくるように以下のようにしました。
 System.Windows.Forms.SendKeys.Send("{End}")
ただ、文字列の途中でもカーソルは最後に来てしまいますが、
とりあえず、これで様子を見ます。
解決済み!
回答ありがとうございます!
> TextBox.CharacterCasingプロパティで一発です。

TextChangedイベントで
Text1.CharacterCasing = CharacterCasing.Upper
することにより1発でうまくいきました
カーソルも最初に戻らないのベリーぐっとです。

じゃんぬさん、まどかさん ありがとうございます。
解決済み!
■No15052に返信(まどかさんの記事)
> TextBox.CharacterCasingプロパティで一発です。

そういえば、こんなのありましたね... 失念してました... orz
使ったことない...
解決済み!
#終わってるようですが。。。

> TextChangedイベントで
> Text1.CharacterCasing = CharacterCasing.Upper
> することにより1発でうまくいきました

そのイベントで毎回おこなう必要はないのでは?
TextBoxの属性ですのでデザインでおこなえば十分です。
動的に変えたいのであれば別ですが、それにしてもTextChangedでおこなう例が思い浮かびません。
解決済み!

> #終わってるようですが。。。
> そのイベントで毎回おこなう必要はないのでは?
> TextBoxの属性ですのでデザインでおこなえば十分です。
> 動的に変えたいのであれば別ですが、それにしてもTextChangedでおこなう例が思い浮かびません。

がーん!その通りでした。TextChangedでする必要有りませんでした
ご指摘ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板