Reputation: 55
When I try to print a multiplication table using the following code,
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
it gives me a well-aligned table as I want as the picture below
If I change the Label1.Text &= Space(8 * (i - 1) + i)
in line 5
into Label1.Text &= Space(8 * (i - 1) )
, the table turns out to be like this:
I guess my question will be: Why I have to add "i" spaces more?
Thanks Edper for his answer.
But I'm just confused why such an additional incrementing space is necessary?
Let's say I'm using Label1.Text &= Space(8 * (i - 1) )
, then there will be no space in the 1st loop, 8 spaces in the 2nd loop, 16 spaces in the 3rd loop... , why won't that make all the equations align?
More specifically, after the equation 1x1=1, there are 3 spaces, so right before 1x2=2, there are 8 characters, then if I have 8 spaces in the 2nd loop, 2x2=4 should have aligned with 1x2=2, but it didn't. That's what I'm wondering about.
Upvotes: 3
Views: 5335
Reputation: 9322
Your i
variable here add an incrementing space every loop
Label1.Text &= Space(8 * (i - 1) + i)
So, to remove the i
variable then would remove that additional incrementing space every loop
Label1.Text &= Space(8 * (i - 1))
Let's analyze the 2x2 for example using the formula Space(8 * (i - 1) + i)
would give
you 8*(2-1)+2 or 10 spaces
Now using the formula Space(8 * (i - 1))
would give you 8*(2-1) or 8 spaces.
So, that would explain the difference in spacing in your output and the rugged looking or non-aligning of your multiplication table on the second one.
Upvotes: 1
Reputation: 2139
What font did you use for the Label1 control? From the screen capture, I can see that you are not using a fixed-width font.
If you change the font to fixed-width font family (eg: Courier New) you will get a perfectly aligned table with the code Label1.Text &= Space(8 * (i - 1))
, while with ...) + i)
code will give you a table with unaligned columns.
The reason for this is, fixed-width fonts have the same width for every characters in the set, at any font size. This include the space (Chr(32)) too. While non fixed-width fonts, each character have different width. Eg: the letter W is wider than i. And spaces will have different width too.
For example:
Fixed-width font:
1x1=1...1x2=2
........2x2=4
Non fixed-width font:
1x1=1...1x2=2
........2x2=4
You can see above, in both 'table' above, I put 7 dots to push the second row to align to the second column of the first row. And in the table using non fixed-width font, the 2x2=4
appears to the left to where it should be.
That means, since the space is narrower, you need to append more spaces to make it aligned like below:
1x1=1...1x2=2
.............2x2=4
In the sample table above, I have to put in 13 dots to make it appear aligned (or close enough). Since this page is using some other font to display this table.
In your case, you are just lucky enough that the font you are using can be aligned perfectly by simply adding i
.
Upvotes: 3