3

当我尝试使用以下代码打印乘法表时,

    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

它给了我一个对齐良好的表格,如下图所示

在此处输入图像描述

如果我更改第Label1.Text &= Space(8 * (i - 1) + i)5 行

,表格变成Label1.Text &= Space(8 * (i - 1) )了这样:

在此处输入图像描述

我想我的问题是:为什么我必须添加更多“i”空格?

感谢埃德珀的回答。

但我只是很困惑为什么需要这样一个额外的增量空间?

假设我正在使用 Label1.Text &= Space(8 * (i - 1) ),那么第一个循环中将没有空格,第二个循环中有 8 个空格,第三个循环中有 16 个空格...,为什么不能使所有方程对齐?

更具体地说,等式 1x1=1 之后有 3 个空格,所以在 1x2=2 之前有 8 个字符,那么如果我在第二个循环中有 8 个空格,2x2=4 应该与 1x2=2 对齐,但是它没有。这就是我想知道的。

4

2 回答 2

3

Label1 控件使用什么字体?从屏幕截图中,我可以看到您没有使用固定宽度的字体。

如果您将字体更改为固定宽度字体系列(例如:Courier New),您将获得一个带有代码的完美对齐表格Label1.Text &= Space(8 * (i - 1)),而带有...) + i)代码的表格将为您提供一个包含未对齐列的表格。

这样做的原因是,对于任何字体大小,集合中的每个字符都具有相同的宽度。这也包括空格 (Chr(32))。虽然非固定宽度字体,但每个字符都有不同的宽度。例如:字母Wi宽。空间也会有不同的宽度。

例如:

固定宽度字体:

1x1=1...1x2=2  
........2x2=4

非等宽字体:

1x1=1...1x2=2
........2x2=4

您可以在上面看到,在上面的两个“表格”中,我放了 7 个点来推动第二行与第一行的第二列对齐。并且在使用非固定宽度字体的表格中,2x2=4出现在它应该在的左侧。

这意味着,由于空间较窄,您需要附加更多空间以使其对齐,如下所示:

1x1=1...1x2=2
.............2x2=4

在上面的示例表中,我必须放入13 个点以使其看起来对齐(或足够接近)。由于此页面使用其他字体来显示此表格。

在您的情况下,您很幸运,您使用的字体可以通过简单地添加来完美对齐i

于 2013-05-04T07:35:31.133 回答
1

您的i变量在每个循环中添加一个递增的空间

Label1.Text &= Space(8 * (i - 1) + i)

因此,要删除i变量,然后会在每个循环中删除额外的增量空间

Label1.Text &= Space(8 * (i - 1))

让我们分析一下 2x2 例如使用公式Space(8 * (i - 1) + i)会给你 8*(2-1)+2 或 10 个空格

现在使用公式Space(8 * (i - 1))会给你 8*(2-1) 或 8 个空格。

因此,这可以解释输出中的间距差异以及第二个乘法表的粗犷外观或不对齐。

于 2013-05-04T05:49:08.483 回答