vb.net

[vb.net] 文字超過10字換行

之前在寫列印報表功能時,小姐打字一次常常就打一長串不換行,導致列印時 報表破版。因為螢幕看起來一行可以打20字,可是報表長度一行可能只能放得下15字而已

也就是說 我要去偵測 只要一行超過15字時,就要自動插入一個換行的符號

所以我寫了一個叫做 wordsplit的function 使用很簡單

就跟
TextBox2.Text = wordsplit(10, TextBox1.Text) 一樣

TextBox1.Text 就是你原始的input資料,而那個10的數字就是多少字要換行。

以後你只要call 這個function然後告訴他幾個字要換行一次就可以了。

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        TextBox2.Text = wordsplit(10, TextBox1.Text)
    End Sub

    Function wordsplit(ByVal Line_num As Integer, input As String) As String
        Dim a As Array
        Dim output = ""
        a = Split(input, vbCrLf)
        For i As Integer = 0 To a.Length - 1 Step 1
            If a(i).Length > Line_num Then
                For number As Integer = Fix(a(i).Length / Line_num) To 1 Step -1
                    a(i) = a(i).Insert(Line_num * number, vbCrLf)
                Next
            End If
            output = output + a(i) + vbCrLf
        Next
        Return output
    End Function
End Class

後記:

因為寫完後小姐表示 怎切割的長度不太對,後來才想到中文其實是佔用兩個byte的空間,但是英文只有一個byte也就是全形半形的概念,所以中文其實要算兩個字(byte)的寬度而英文只能算一個字的寬度
所以我又改寫了一個出來

Public Class Form1


    Function wordsplit(ByVal Line_num As Integer, input As String) As String
        Dim a As Array
        Dim output = ""
        Dim strLen As String
        a = Split(input, vbCrLf)
        
        For k As Integer = 0 To a.Length - 1 Step 1

            Dim i = 1
            Dim vbvcrf = 0 '塞換行符號算兩字元
            Dim tempoutput As String

            tempoutput = a(k)
            For j As Integer = 1 To a(k).Length Step 1
                strLen = Mid(a(k), i, j - i + 1)

                If System.Text.Encoding.Default.GetBytes(strLen).Length >= Line_num Then
                    tempoutput = tempoutput.Insert(j + vbvcrf * 2, vbCrLf)
                    vbvcrf = vbvcrf + 1
                    i = j + 1
                End If
            Next
            output = output + tempoutput + vbCrLf
        Next

        Return output
    End Function


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TextBox2.Text = wordsplit(10, TextBox1.Text)
    End Sub
End Class

上面這個就是依照BYTE的寬度在算了 也就是把每個中文字都當兩個字來判斷長度,
這樣中英文混雜來排版列印大抵上應該也比較沒問題了(最多差半個字的排版這樣)

Be the First to comment.

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

(若看不到驗證碼,請重新整理網頁。)