vb net 根据字符串长度设置字体大小

vb net set font size based on string length

我正在尝试根据三个文本字符串的长度来设置字体大小
限制因素是打印区域,即 Avery 地址标签 1" X 2-5/8"
要打印的三串数据用全局变量gv
表示 因为这三个字符串的长度可能会根据数据而变化,我测试长度的代码试图比较 3 个元素来决定字体大小。如果一组太长那么它决定字体大小
如果所有数据都是真正的 long
,则第一个测试有效 第二个测试有效,但不允许第三个测试起作用。发布的代码将使这一点更加清晰。希望

我不确定是不是我的测试代码构建失败,因为我尝试了很多设计
我看过这个概念,但觉得它对我的问题不可行

StringSize = e.Graphics.MeasureString(strS, myFont)

因为我正在处理 3 个高度可变的元素,所以我觉得我的测试代码不是一个可行的概念

如果有更好的解决方案可以帮助解决这个问题,需要建议
或者我的测试代码可以固定工作吗?

测试代码

    Dim FL As Integer = gv_FN.Length + gv_LN.Length

    If gv_AD.Length >= 24 Or FL >= 26 Or gv_CT.Length >= 16 Then
        fontSIZE = 11
    End If
    If gv_AD.Length = 23 Or gv_AD.Length = 22 Or gv_AD.Length = 21 Or gv_AD.Length = 20 Or gv_AD.Length = 19 _
        Or FL = 25 Or FL = 24 Or FL = 23 Or FL = 22 Or FL = 21 _
        Or gv_CT.Length = 15 Or gv_CT.Length = 14 Or gv_CT.Length = 13 Or gv_CT.Length = 12 Then
        fontSIZE = 13
    End If
    If gv_AD.Length <= 18 Or FL <= 20 Or gv_CT.Length <= 11 Then
        fontSIZE = 15
    End If
    tbInfo.Text = fontSIZE.ToString
    Dim labelFont As Font = New Font("Times New Roman", fontSIZE, FontStyle.Bold)

这是一个带有 FIX 的编辑,@Hursey 建议使用 ElseIf

        If gv_AD.Length >= 24 Or FL >= 26 Or gv_CT.Length >= 16 Then
        fontSIZE = 11

    ElseIf gv_AD.Length = 23 Or gv_AD.Length = 22 Or gv_AD.Length = 21 Or gv_AD.Length = 20 Or gv_AD.Length = 19 _
     Or FL = 25 Or FL = 24 Or FL = 23 Or FL = 22 Or FL = 21 _
     Or gv_CT.Length = 15 Or gv_CT.Length = 14 Or gv_CT.Length = 13 Or gv_CT.Length = 12 Then
        fontSIZE = 13
    Else
        fontSIZE = 15
    End If
    tbInfo.Text = fontSIZE.ToString
    Dim labelFont As Font = New Font("Times New Roman", fontSIZE, FontStyle.Bold) 'Times New Roman

您可以将三个字符串元素相加,然后只需要测试一个值
测试值将与您当前的测试值大不相同
我整理了一些抽象数字,所以你需要自己的集合

    Dim FL As Integer = gv_FN.Length + gv_LN.Length
    Dim AD As Integer = gv_AD.Length
    Dim CT As Integer = gv_CT.Length
    Dim tot As Integer = FL + AD + CT
    If tot >= 54 Then
        fontSIZE = 12
    End If
    If tot = 53 Or tot = 52 Or tot = 51 Or tot = 50 Or tot = 49 Or tot = 48 _
        Or tot = 47 Or tot = 46 Or tot = 45 Or tot = 44 Or tot = 43 Then
        fontSIZE = 13
    End If
    If tot <= 42 Then
        fontSIZE = 15
    End If

希望标签的3行字号都一样。获取最长的行并测试它以获得字体大小。

解析字符串长度一次;然后使用局部变量。使用 .Max 函数 returns 最长的行。

Private gv_FN As String
Private gv_LN As String
Private gv_AD As String
Private gv_CT As String
Private Sub OP2Code()
    Dim fontSIZE As Integer
    Dim FirstLine As Integer = gv_FN.Length + gv_LN.Length
    Dim SecondLine = gv_AD.Length
    Dim ThirdLine = gv_CT.Length
    Dim Longest = (New List(Of Integer)({FirstLine, SecondLine, ThirdLine})).Max
    Select Case Longest
        Case >= 26
            fontSIZE = 11
        Case >= 21
            fontSIZE = 13
        Case <= 20
            fontSIZE = 15
    End Select
    tbInfo.Text = fontSIZE.ToString
    Dim labelFont As Font = New Font("Times New Roman", fontSIZE, FontStyle.Bold)
End Sub