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」スペースをさらに追加する必要があるのはなぜですか?

Edper の回答に感謝します。

しかし、なぜこのような追加の増分スペースが必要なのか混乱していますか?

を使用しているとしましょう Label1.Text &= Space(8 * (i - 1) )。すると、最初のループにはスペースがなく、2 番目のループには 8 つのスペースがあり、3 番目のループには 16 のスペースがあります。

より具体的には、1x1=1 の式の後、3 つのスペースがあるため、1x2=2 の直前に 8 文字があり、2 番目のループに 8 つのスペースがある場合、2x2=4 は 1x2=2 と整列する必要がありますが、しませんでした。それが私が疑問に思っていることです。

4

2 に答える 2

3

Label1 コントロールに使用したフォントは何ですか? スクリーン キャプチャから、固定幅フォントを使用していないことがわかります。

フォントを固定幅フォント ファミリ (例: Courier New) に変更すると、コードを使用すると完全に整列されたテーブルが得られますが、コードLabel1.Text &= Space(8 * (i - 1))...) + i)使用すると列が整列されていないテーブルが得られます。

この理由は、固定幅フォントは、どのフォント サイズでも、セット内のすべての文字の幅が同じであるためです。これにはスペース (Chr(32)) も含まれます。固定幅フォントではありませんが、文字ごとに幅が異なります。例: 文字Wはiよりも幅が広いです。また、スペースの幅も異なります。

例えば:

等幅フォント:

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

非固定幅フォント:

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

上記の両方の「表」で、2 行目を押して 1 行目の 2 列目に揃えるために 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 つのスペースが得られます。

したがって、それは出力の間隔の違いと、2番目の乗算表の頑丈な外観または非整列を説明します.

于 2013-05-04T05:49:08.483 に答える