【发布时间】:2020-09-30 16:05:57
【问题描述】:
我正在尝试根据三个文本字符串的长度设置字体大小
限制因素是打印区域,即 Avery 地址标签 1" X 2-5/8"
需要打印的三串数据用全局变量gv表示
因为这三个字符串的长度可能会根据数据而有所不同,所以我测试长度的代码试图比较 3 个元素以决定字体大小。如果一组太长,则它决定了字体大小
如果所有数据都非常长,则第一个测试有效
第二个测试有效,但无法允许第三个测试运行。发布的代码将使这一点更加清晰。希望
我不确定失败是否是我的测试代码构造,因为我尝试了许多设计
我看过这个概念,但觉得它不适用于我的问题
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
【问题讨论】:
-
什么是gv_AD、gv_CT、gv_FN和gv_LN?从你的逻辑来看,后面的条件覆盖第一个条件似乎是很可行的。也许您的答案可能是“ElseIf”而不是单独的操作
-
@Hursey 糟糕的命名约定它们是全局变量 AD = 地址 FN 和 LN 是名字和姓氏,CT 是城市 在数据输入文本框中控制最大值 让我试试 Elseif 的代码
-
@Hursey 一些改进但没有达到字体大小设置为 15 的最后一个测试它可能是第二个测试中的 Or 测试值可以尝试 Last ElseIf 没有参数
-
获得了一些您希望进入第三个的测试值,如果?也许用你的新代码更新问题
-
@Hursey ElseIF 解决了问题,我将更新问题感谢您的帮助