背景と目的
なぜ自動改行が必要なのか?
テキストボックスで入力を行う際、特定の条件で自動的に改行を入れたいケースがあります。例えば、
-
指定した文字数ごとに改行を入れたい(チャットアプリやメモ帳など)
-
句読点や括弧が行頭にこないように調整したい
-
手動での改行は許可せず、自動的に整った文章を作成したい
通常の TextBox コントロールでは、Wordのような適切な改行処理は備わっていません。そのため、
プログラムでルールを決めて、自動的に改行を行う処理が必要になります。
本記事で実装する機能
今回の実装では、以下のような機能を備えた自動改行処理を作成します。
✅ 入力テキストの監視(リアルタイム処理)
- TextChanged イベントを使い、ユーザーが入力するたびに処理を実行
✅ Enterキーを無効化
- 手動での改行を禁止し、プログラムでのみ改行を制御
✅ 一定の文字数ごとに自動改行を挿入
- 例)50文字ごとに改行を入れる
✅ 句読点や括弧が行頭にこないように調整
- 「(【『 などが行の先頭にこないようにする
✅ バックスペースの処理を最適化
- 改行の削除時に違和感のない動作をするように調整
第1章:テキストボックスの監視方法と基本的な改行処理
TextChanged イベントを使った入力監視
テキストボックスの内容が変更されたときに、自動的に処理を行うには TextChanged イベントを使用します。
Private Sub Textbox1_Changed(sender As Object, e As EventArgs) Handles Textbox1.TextChanged
' ここで入力内容を処理する
End Sub
これにより、ユーザーがテキストを入力するたびにイベントが発生し、処理を実行できます。
手動改行の無効化
手動で改行されると制御が難しくなるため、KeyPress イベントを使って Enter キーを無効にします。
Private Sub Textbox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Textbox1.KeyPress
If e.KeyChar = ChrW(Keys.Enter) OrElse e.KeyChar = ChrW(Keys.LineFeed) Then
e.Handled = True ' 改行キーを無効化
End If
End Sub
文字数ごとの改行挿入
一定の文字数ごとに改行を入れるには、文字列を分割しながら処理する関数を作成します。
Private Function InsertLineBreaks(input As String, maxChars As Integer) As String
Dim result As New List(Of String)()
Dim currentLine As New System.Text.StringBuilder()
Dim maxChars As Integer = 50 ' 一行当たりの最大文字数を設定
For i As Integer = 0 To input.Length - 1
' テキストボックス内の文字を一文字ずつ変数に追加する
currentLine.Append(input(i))
' 現在の行が最大文字数に達した場合
If currentLine.Length >= maxChars Then
' リストに現在の行の文字列を追加する
result.Add(currentLine.ToString())
currentLine.Clear()
End If
Next
' 残った文字列を追加
If currentLine.Length > 0 Then
result.Add(currentLine.ToString())
End If
' 結果を改行で連結して返す
Return String.Join(vbCrLf, result)
End Function
次の章では、句読点や括弧の調整について解説します。