Microsoft Access 掲示板

短いテキスト型のテキストボックス内で改行するとき

4 コメント
views
4 フォロー

お世話になっております。
フォームに配置した短いテキスト型のテキストボックスの、Enterキー入力時操作のプロパティを「フィールドに行を追加」にして改行できるようにしています。Enterを押して3行目から4行目に移動するとき、4行目を作らず次のテキストボックスに移動できるようにしたいのですが、実現可能でしょうか?

NoName
作成: 2024/07/22 (月) 12:55:44
通報 ...
1
hatena 2024/07/22 (月) 16:14:37 修正

Enterを押して3行目から4行目に移動するとき、4行目を作らず次のテキストボックスに移動できるようにしたいのですが、実現可能でしょうか?

3行までしか入力できないように制限したいということですね。
実現可能かといえば、可能です。
「キークリック時」のイベントプロシージャにコードを記述することになります。

「Enterを押して3行目から4行目に移動するとき」とのことですが、例えば下記のようなときにはどのような動作になることがご希望ですか。

カーソルがテキストの最後ではなく途中にあるときにEnterを押したとき(例えば、3行入力されていて、カーソル位置が2行目の真ん中でEnterを押す)

貼り付けで4行以上のテキストを貼り付けたとき、あるいは、貼り付けた結果4行以上になるとき。

2

とりあえず、
貼り付けの場合は何もしない、
3行入力してあるときに、Enterキーを押したら次のテキストボックスへ移動するということだとして(カーソルがどこにあっても)、
下記のコードになります。

Private Sub テキスト1_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim s As String
    If KeyCode = vbKeyReturn Then
        s = Me.テキスト1.Text
        If Len(s) - Len(Replace(s, vbCrLf, "")) >= 4 Then
            KeyCode = 0
            Me.テキスト3.SetFocus
        End If
    End If
End Sub
3

回答ありがとうございます。
実装できたのですが、改行無しで2行や3行になった場合、4行目・5行目を入力することができてしまいます。

例えば、幅7㎝、高さ1.5cmのテキストボックスにフォントサイズ14だと、文字詰め無しのフォントで1行あたり14文字入力、スクロールなしで3行分表示できるのですが、20文字入力すると6文字分が2行目に行き、入力を進めていくと4行目、5行目にも入力出来てしまいます。

コード的に、改行("")の個数で判断してるためだと思いますが、解決方法はありますでしょうか。

4

折り返しも考慮して3行以内ととうことですね。

等幅フォントなら、文字数から折り返しを計算できますので、可能だとは思います。
ただし、全角/半角の文字幅、ワードラップ、禁則処理なども考慮する必要があるので、簡単ではないですね。

プロポーショナルフォントだと文字毎に幅が異なるのでAPIが必要になるのでさらに難易度が高くなります。

不可能ではないと思いますが、わたし自身は必要性を感じないので、コードを提示することはしません。

レポートなら、テキストボックスの印刷時拡張機能で折り返しで行数に合わせて高さが拡張されるので、そこから折り返し後の行数を取得することは可能です。

蛇足

テキストデータを行数で分割するというのは、データベース的ではないと思います。
見た目の問題だと思うので。

私がするなら、1フィールド(1テキストボックス)に入力させて、必要に応じて、分割するという方法をとりますね。