いつも参考にさせてもらっています。
テキストボックスにてキー入力された文字を全て全角にしたいのですが、
「¥」を2回キー入力すると直接入力モードになってしまい、
Text1_Changeで入力された文字列を全部確認し1バイトの文字列を
StrConvを使用して全角に変換させてはいますが、変換することができません。
直接入力モードを無効にする方法か、半角文字列を強制的に全角に変換する方法などあれば教えてください。
お願いします。
>>「¥」を2回キー入力すると直接入力モードになってしまい、
IMEの設定がそうなっているだけなのだが…(変更すればならなくなる)
>>直接入力モードを無効にする方法
例えば、KeyDown辺りで毎回IMEの状態をチェックして、直接入力モードになってたら全角モードに強制的に変更するとか、考えたら出てくるよね
\\だけしか打ってないと確定されるけど、入力の途中に
\\を入れると確定されないままモードだけ変わったり…
ちょっと気をつけないといけない動作もあるみたいだし、
IMEの設定を変える方が自然だと思います。
[プロパティ画面]
http://web.sfc.keio.ac.jp/~t03920hm/ahoWord/aw_ime.htm
[和英混在入力]を設定します。
通ってみたさん、特攻隊長まるるうさんありがとうございます。
KeyDownでもChangeイベントでもIMEmodeのチェックを行っていますが、
直接入力モードはすぐにIMEmodeが変わらないのか\キーを2回押すと半角の"\"が2個入り、3回目に\キーを押すと全角になります。
ChangeイベントでもIMEmodeのチェックをして、
文字数の2倍のバイト数でなければStrConvにて全角に変換しています。
自分のパソコンで、IMEプロパティの変更をしていても、
他の人のパソコンで使うには、IMEプロパティを変更するように
注意しなければいけないでしょうか。
すみません、追記です。
Changeイベントで全角変換していても、半角のままで、出力されてしまいます。
\は特殊だからという話なだけで
If文で\を単独チェックしたら済むんじゃない?
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 92 Then '半角の\が入力されたら
KeyAscii = -32369 '強制的に全角¥に変換
End If
End Sub
こんなのどうでしょう?
\以外も全角にしたいのなら結構根気が要りますが・・・w
>自分のパソコンで、IMEプロパティの変更をしていても、
>他の人のパソコンで使うには、IMEプロパティを変更するように
>注意しなければいけないでしょうか。
ボクには理解できない質問です。IMEプロパティで
『\\と打たれた時は直接入力モードにしたい』
という設定になっているんですよね?…で、それが
多分デフォルト設定なワケです。そこに文句を言って
いるのであればマイクロソフトに直接言って下さい。
>Changeイベントで全角変換していても、半角のままで、出力されてしまいます。
[VB.NET]の情報だけど
[文字列を全角/半角に変換するには?]
http://www.atmarkit.co.jp/fdotnet/dotnettips/265vbhanzen/vbhanzen.html
StrConv で全角に変換するときに注意する文字はいくつか
あるみたい。デバッグして変換されているかどうか調べれば
分かった話では?質問する必要あるの?それで正常な結果です。
Replace 関数とか使って置換できます。
phantom さんのコードでいけるかと思ったけど、確定前
(\以外の文字を最初に打って\\と打つ)はIME側の表示が
半角に(汗)そこを我慢すれば…
っつか、それがIMEの仕様なんだろうから、アプリ側で
変更する方がやり過ぎなんだけどね…本来は。ボク
だったら半角チェックだけしてユーザに修正させるね。
…で、『\\と打っても全角にしたい』という要望があって
からIMEプロパティの説明します。OSとかの標準的な
動作を強制するアプリは後々自分の首を絞める事が
ありますから。
みなさん、お返事ありがとうございます。
通ってみたさんの意見を参考にしたのがコメントで、
今回はphantomさんの意見を取り入れて、作ってみました。
全角で確定されたとき、ちゃんと全角になったので本当に助かりました。
ありがとうございました^^
Private Sub Text1_Change()
Dim intStart As Integer
intStart = Text1.SelStart
If Len(Text1.Text) <> LenB(Text1.Text) Then
Text1.Text = StrConv(Text1.Text, vbWide)
End If
' Text1.Text = Replace(Text1.Text, "\", "¥")
Text1.SelStart = intStart + 1
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Text1.IMEMode <> 1 Then
Text1.IMEMode = 1
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 92 Then '半角の\が入力されたら
KeyAscii = -32369 '強制的に全角¥に変換
End If
End Sub
ツイート | ![]() |