直接入力モードになった時、その文字列も全角にするには?

解決


calyu  2005-07-28 00:29:32  No: 123781

いつも参考にさせてもらっています。
テキストボックスにてキー入力された文字を全て全角にしたいのですが、
「¥」を2回キー入力すると直接入力モードになってしまい、
Text1_Changeで入力された文字列を全部確認し1バイトの文字列を
StrConvを使用して全角に変換させてはいますが、変換することができません。
直接入力モードを無効にする方法か、半角文字列を強制的に全角に変換する方法などあれば教えてください。
お願いします。


通ってみた  2005-07-28 04:10:10  No: 123782

>>「¥」を2回キー入力すると直接入力モードになってしまい、
IMEの設定がそうなっているだけなのだが…(変更すればならなくなる)

>>直接入力モードを無効にする方法
例えば、KeyDown辺りで毎回IMEの状態をチェックして、直接入力モードになってたら全角モードに強制的に変更するとか、考えたら出てくるよね


特攻隊長まるるう  2005-07-28 18:03:11  No: 123783

\\だけしか打ってないと確定されるけど、入力の途中に
\\を入れると確定されないままモードだけ変わったり…
ちょっと気をつけないといけない動作もあるみたいだし、
IMEの設定を変える方が自然だと思います。
[プロパティ画面]
http://web.sfc.keio.ac.jp/~t03920hm/ahoWord/aw_ime.htm
[和英混在入力]を設定します。


calyu  2005-07-28 21:22:13  No: 123784

通ってみたさん、特攻隊長まるるうさんありがとうございます。

KeyDownでもChangeイベントでもIMEmodeのチェックを行っていますが、
直接入力モードはすぐにIMEmodeが変わらないのか\キーを2回押すと半角の"\"が2個入り、3回目に\キーを押すと全角になります。
ChangeイベントでもIMEmodeのチェックをして、
文字数の2倍のバイト数でなければStrConvにて全角に変換しています。

自分のパソコンで、IMEプロパティの変更をしていても、
他の人のパソコンで使うには、IMEプロパティを変更するように
注意しなければいけないでしょうか。


calyu  2005-07-28 21:24:23  No: 123785

すみません、追記です。
Changeイベントで全角変換していても、半角のままで、出力されてしまいます。


通ってみた  2005-07-28 22:02:21  No: 123786

\は特殊だからという話なだけで
If文で\を単独チェックしたら済むんじゃない?


phantom  2005-07-28 22:07:21  No: 123787

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 92 Then    '半角の\が入力されたら
        KeyAscii = -32369    '強制的に全角¥に変換
    End If
End Sub

こんなのどうでしょう?
\以外も全角にしたいのなら結構根気が要りますが・・・w


特攻隊長まるるう  2005-07-28 22:47:53  No: 123788

>自分のパソコンで、IMEプロパティの変更をしていても、
>他の人のパソコンで使うには、IMEプロパティを変更するように
>注意しなければいけないでしょうか。
ボクには理解できない質問です。IMEプロパティで
『\\と打たれた時は直接入力モードにしたい』
という設定になっているんですよね?…で、それが
多分デフォルト設定なワケです。そこに文句を言って
いるのであればマイクロソフトに直接言って下さい。

>Changeイベントで全角変換していても、半角のままで、出力されてしまいます。
[VB.NET]の情報だけど
[文字列を全角/半角に変換するには?]
http://www.atmarkit.co.jp/fdotnet/dotnettips/265vbhanzen/vbhanzen.html
StrConv で全角に変換するときに注意する文字はいくつか
あるみたい。デバッグして変換されているかどうか調べれば
分かった話では?質問する必要あるの?それで正常な結果です。
Replace 関数とか使って置換できます。

phantom さんのコードでいけるかと思ったけど、確定前
(\以外の文字を最初に打って\\と打つ)はIME側の表示が
半角に(汗)そこを我慢すれば…

っつか、それがIMEの仕様なんだろうから、アプリ側で
変更する方がやり過ぎなんだけどね…本来は。ボク
だったら半角チェックだけしてユーザに修正させるね。
…で、『\\と打っても全角にしたい』という要望があって
からIMEプロパティの説明します。OSとかの標準的な
動作を強制するアプリは後々自分の首を絞める事が
ありますから。


calyu  2005-07-29 01:13:24  No: 123789

みなさん、お返事ありがとうございます。
通ってみたさんの意見を参考にしたのがコメントで、
今回は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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加