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

テキストボックスのマルチライン入力について

環境/言語:[WindowsXP, VB.net, SQLServer2000]
分類:[.NET]

毎回、壁にぶち当たるたびに掲示板をのぞいてます!!

今回はテキストボックスのマルチラインで悩んでいます。
漢字で100文字まで入力可能な項目なんですが、改行キーで次の入力領域にフォーカスを移したいんです。
しかし、改行キーや↓矢印キーを押したと同時に、入力した文字が1行分下にずれたり、全部消えてしまったりします。
1行のテキストボックスを使っている時と同じような動きをしてくれる方法はないのでしょうか?

入力する人がオフコンに慣れていた人なので、出来ればEnterキーでフォーカスを次々と移していきたいのですが・・・

よろしくお願いします。
KeyDown() イベントより前の段階で、やっとけば...

    Protected Overrides Function ProcessDialogKey(ByVal uKeyData As Keys) As Boolean
        Select Case uKeyData
            Case Keys.Enter
                uKeyData = Keys.Tab

            Case Keys.Enter Or Keys.Shift
                uKeyData = Keys.Tab Or Keys.Shift
        End Select

        Return MyBase.ProcessDialogKey(uKeyData)
    End Function

# ただし、この実装をした場合は[Ctrl]+[Enter]で、
# MultiLineTextBoxの改行を表現することになります。
■No6792を修正(java.lang.Nullpoの記事)

こっちでやるべきかな。

    Private Sub FormMain_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles MyBase.KeyPress
        Select Case Asc(e.KeyChar)
            Case Keys.Enter
                Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
                e.Handled = True
            Case Keys.Enter Or Keys.Shift
                Me.SelectNextControl(Me.ActiveControl, False, True, True, True)
                e.Handled = True
        End Select
    End Sub
■No6793に返信(java.lang.Nullpoさんの記事)
> ■No6792を修正(java.lang.Nullpoの記事)
>
> こっちでやるべきかな。
>

さっきから、私の質問に対して返信していただきありがとうございます。
いろいろ試しているところです。

入力項目が十数か所あり、マルチラインのテキストボックス以外は普通のKeyDownを通したいので、今悪戦苦闘しながらいろいろ試しているところです。

今回の返信内容もこれから試してみます。
さっきから下記の Case文が理解できずにいます。
最初の Case Keys.Enter はEnterキーが押された時の処理ですが
次の Case Keys.Enter Or Keys.Shift は何が押された時に処理されるのでしょうか?

> Select Case Asc(e.KeyChar)
> Case Keys.Enter
> Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
> e.Handled = True
> Case Keys.Enter Or Keys.Shift
> Me.SelectNextControl(Me.ActiveControl, False, True, True, True)
> e.Handled = True
> End Select
■No6795に返信(Booさんの記事)
> さっきから下記の Case文が理解できずにいます。
> 最初の Case Keys.Enter はEnterキーが押された時の処理ですが
> 次の   Case Keys.Enter Or Keys.Shift は何が押された時に処理されるのでしょうか?

ごめんなさい、↓コレ間違ってます。

>     Case Keys.Enter Or Keys.Shift
>         Me.SelectNextControl(Me.ActiveControl, False, True, True, True)
>             e.Handled = True

KeyDown() イベントのKeyCodeじゃないのだから、こんな聞き方はできないですね。
すいません、ボケてました。

    Private Sub FormMain_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles MyBase.KeyDown
        ' [Control] + [Enter]で改行を表現するため、Controlキーが押された場合は除外
        If e.KeyCode = Keys.Enter AndAlso e.Modifiers <> Keys.Modifiers.Control Then
            ' TextBox上でだけ処理する場合は↓コメントアウト部分を外す
            'If Me.ActiveControl.GetType().Name = "TextBox" Then
                Me.SelectNextControl(Me.ActiveControl, Not e.Shift, True, True, True)
            'End If
        End If
    End Sub

    Private Sub FormMain_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles MyBase.KeyPress
        If Asc(e.KeyChar) = Keys.Enter Then
            e.Handled = True
        End If
    End Sub
お世話になってますBooです。
2日間、とっても苦労しましたが、下のコーディングを使わせていただきました。
なかなか上手くいかなかったんですが、いままでKeyDownで次の項目へ移動していたのをとめたらOKでした。
本当にいいのかどうなのかは???ですが、とりあえずは次に進もうと思います。
ありがとうございました。



> Private Sub FormMain_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles MyBase.KeyPress
> Select Case Asc(e.KeyChar)
> Case Keys.Enter
> Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
> e.Handled = True
> End Select
> End Sub
■No6820に返信(Booさんの記事)
> お世話になってますBooです。
解決済み!

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