当我尝试使用以下代码打印乘法表时,
Dim se As String
Label1.Text = Space(35) & "九九乘法表" & vbCrLf
Label1.Text &= Space(35) & "-----------" & vbCrLf
For i = 1 To 9
Label1.Text &= Space(8 * (i - 1) + i)
For j = i To 9
se = i & "×" & j & "=" & i * j
Label1.Text &= se & Space(8 - Len(se))
Next j
Label1.Text &= vbCrLf
Next i
它给了我一个良好对齐的表格,如下图所示
如果我更改了第5行中的Label1.Text &= Space(8 * (i - 1) + i)
进入Label1.Text &= Space(8 * (i - 1) )
,表格结果如下:
我想我的问题是:为什么我要添加“i”空格?
感谢Edper的回答。
但我很困惑为什么需要这样一个额外的增量空间呢?
假设我正在使用Label1.Text &= Space(8 * (i - 1) )
,那么第一个循环中没有空格,第二个循环中没有空格,第三个循环中有16个空格......为什么不能方程对齐?
更具体地说,在等式1x1 = 1之后,有3个空格,所以在1x2 = 2之前,有8个字符,那么如果我在第2个循环中有8个空格,则2x2 = 4应该与1x2 =对齐2,但它没有。这就是我想知道的。
答案 0 :(得分:3)
您使用哪种字体用于Label1控件?从屏幕截图中,我可以看到您没有使用固定宽度的字体。
如果您将字体更改为固定宽度字体系列(例如:Courier New),您将获得一个与代码Label1.Text &= Space(8 * (i - 1))
完美对齐的表格,而使用...) + i)
代码将为您提供一个表格未对齐的列。
原因是,对于任何字体大小,固定宽度字体对于集合中的每个字符具有相同的宽度。这也包括空间(Chr(32))。虽然非固定宽度的字体,每个字符有不同的宽度。例如:字母 W 比 i 宽。空间也有不同的宽度。
例如:
固定宽度字体:
1x1=1...1x2=2
........2x2=4
非固定宽度字体:
1×1 = 1 ... 1×2 = 2
........ 2×2 = 4
你可以看到上面,在上面的'table'中,我把7个点推到第二行以对齐第一行的第二列。在使用非固定宽度字体的表格中,2x2=4
显示在左侧所在的位置。
这意味着,由于空间较窄,您需要添加更多空格以使其对齐如下:
1×1 = 1 ... 1×2 = 2
............. 2×2 = 4
在上面的示例表中,我必须放入 13 点以使其显示为对齐(或足够接近)。由于此页面使用其他一些字体来显示此表。
在您的情况下,您很幸运,只需添加i
即可完美对齐您使用的字体。
答案 1 :(得分:1)
您的i
变量此处为每个循环添加一个递增空间
Label1.Text &= Space(8 * (i - 1) + i)
因此,要删除i
变量,则会在每个循环中删除该额外的递增空间
Label1.Text &= Space(8 * (i - 1))
让我们使用Space(8 * (i - 1) + i)
给出的公式来分析2x2
你8 *(2-1)+2或10个空格
现在使用公式Space(8 * (i - 1))
会给你8 *(2-1)或8个空格。
因此,这可以解释输出中间距的差异以及第二个乘法表的粗糙外观或非对齐。