tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルテキストボックスの全角カナの複数文字を半角にしたい
記事No11973
投稿日: 2018/03/10(Sat) 12:28
投稿者かっちゃん
いつもこのサイトを参考にして助かっております
ありがとうございます。

テキストボックスの入力に関する質問です。
よろしくお願いいたします。

Microsoft Visual studio 2010を使用しております。
vb.netのテキストボックスの入力で全角カナで入力した時、Enterキーで
半角に変換して表示したいのですが、入力文字が反対になってしまいます。
入力順に表示したいのですがどのように表示したらよいでしょうか?

例:
  txtBox のテキストで "アイウエオ" 入力して Enterキーを押す

    Private Sub txtBox_TextChanged(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged
          ' 入力データを半角文字に変換
            Call ModDataChange(txtBox)
  End Sub

    Public Sub ModDataChange(ByRef txt As System.Windows.Forms.TextBox)
        Dim wkstrText As String
        ' 入力データを半角文字に変換
        wkstrText = StrConv(txt.Text, VbStrConv.Narrow)
        txt.Text = wkstrText
    End Sub

    Enterキー後に表示されるtxtBox のテキスト内容は "オエウイア"
    半角で表示されます。

  1文字ごとにEnterキーを押せば、順番に並びますが、
  連続で入れて Enterキーをおしても "アイウエオ" と半角にしたいのですが
  どのようにすればよいでしょうか

  よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: テキストボックスの全角カナの複数文字を半角にしたい
記事No11974
投稿日: 2018/03/10(Sat) 19:04
投稿者jikoryuu
TextChangedイベントで内容を変更してしまうとキャレットカーソルが文字の先頭になってしまいまうのが原因のようです
プレーンテキスト(IMEを使わない)でアルファベットを入力しても同じことが起きます

これを回避するには

txt.SelectionStart = Len(txt.Text)

とすると文字の最後にキャレットカーソルが移動し順番に表示されると思います
※しかし再変換や既にある文字の途中で文字を挿入しようとすると問題が発生します

このような問題があるためにTextChangedイベントでは入力更生やデータチェックに留めておいて
文字変換を行う場合は通常はValidatedイベントで行います

Validatedイベントはロストフォーカスの前に発生して文字のチェック(入力更生)を行い
エラーがあれば再入力を促すときなどに使います

こちらのイベントを使うことをお勧めします

[ツリー表示へ]
タイトルRe^2: テキストボックスの全角カナの複数文字を半角にしたい
記事No11975
投稿日: 2018/03/17(Sat) 10:24
投稿者かっちゃん
jikoryuu 様
ありがとうございます。

色々やってみても上手くいかなかったもので、
大変、参考になりました

今後もよろしくお願いいたします

        かっちゃん

[ツリー表示へ]
タイトルRe: テキストボックスの全角カナの複数文字を半角にしたい
記事No11976
投稿日: 2018/03/17(Sat) 11:13
投稿者かっちゃん
すみません。継続で質問をお願いします

入力データを半角文字に変換の前にMSGBOXを入れると、入力した全桁が整うまで
Call ModDataChange(txtBox) を実行しないみたいです。
ただ、MSGBOXだと毎回表示されてしまうので、入力した全桁までは次のロジックにいかないコマンドで
調整できれば最高なのですが、

   MsgBox(txtBox.Text)
      Call ModDataChange(txtBox)

Validatedは一度フォーカスを移動させないといかないので、
できれば、入力しながら変換できればと思っておりました。

色々と面倒かけてすみません

           かっちゃん


> 例:
>   txtBox のテキストで "アイウエオ" 入力して Enterキーを押す
>
>     Private Sub txtBox_TextChanged(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged
>           ' 入力データを半角文字に変換
>             Call ModDataChange(txtBox)
>   End Sub
>
>     Public Sub ModDataChange(ByRef txt As System.Windows.Forms.TextBox)
>         Dim wkstrText As String
>         ' 入力データを半角文字に変換
>         wkstrText = StrConv(txt.Text, VbStrConv.Narrow)
>         txt.Text = wkstrText
>     End Sub
>
>     Enterキー後に表示されるtxtBox のテキスト内容は "オエウイア"
>     半角で表示されます。
>
>   1文字ごとにEnterキーを押せば、順番に並びますが、
>   連続で入れて Enterキーをおしても "アイウエオ" と半角にしたいのですが
>   どのようにすればよいでしょうか
>
>   よろしくお願いいたします。

[ツリー表示へ]