基于字符串长度的vb net set字体大小

时间:2020-09-29 22:09:12

标签: vb.net font-size

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

由于尝试了多种设计,我不确定失败是否是我的测试代码构造
我已经看过这个概念,但是觉得对我的问题不可行

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的EDIT,正如@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

2 个答案:

答案 0 :(得分:1)

您可以将三个字符串元素总计,然后只需测试一个值
测试值将与您当前的测试值有很大不同
我汇总了一些抽象数字,因此您将需要自己的集合

    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

答案 1 :(得分:1)

我希望标签的3行都具有相同的字体大小。获取最长的行,并进行测试以获取字体大小。

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

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