String.Format对齐方式

时间:2017-05-20 21:52:52

标签: vb.net string-formatting

我无法调整我的四列:

enter image description here

标题的字符串格式正常。当我读取下一行并将其放入列表时,String.Format获取视频名称并创建调整为视频名称长度的列。我该如何解决这个问题?

Private Sub pdPrint_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles pdPrint.PrintPage

    e.Graphics.DrawString("Movie Collection", New Font("Courier", 20, FontStyle.Bold), Brushes.Black, 300, 10)

    e.Graphics.DrawString(String.Format("{0, -20} {1,-20} {2, -20} {3,-20}", "VIDEO NAME", "YEAR PRODUCED", "RUNNING TIME", "RATING"), New Font("Courier", 12, FontStyle.Bold), Brushes.Black, 10, 70)


    Using reader As New StreamReader("testing.txt")
        Dim intVertPosition As Integer = 90
        While Not reader.EndOfStream
            Dim videoName As String = reader.ReadLine()
            Dim yearProduced As String = reader.ReadLine()
            Dim runningTime As String = reader.ReadLine()
            Dim rating As String = reader.ReadLine()
            Dim extraline As String = reader.ReadLine()


            e.Graphics.DrawString(String.Format("{0, -30} {1,30} {2, 30} {3,30}", videoName.ToString(), yearProduced.ToString(), runningTime.ToString(), rating.ToString()), New Font("Courier", 12, FontStyle.Regular), Brushes.Black, 10, intVertPosition)
            intVertPosition += 14
        End While
    End Using


End Sub

1 个答案:

答案 0 :(得分:2)

e.Graphics.DrawString(..., New Font("Courier", 20, FontStyle.Bold), ...)

这是问题的开始。如果空格的宽度与字母的宽度相同,则此类格式化只能正常工作。或者换句话说,它需要固定间距字体。但是你可以从屏幕截图中清楚地看出你有一个按比例调整的字体。因此,粗略地说,第一列中的文本越多,它推出下一列的次数就越多。

这是因为你选择了“Courier”。它是遗留设备字体的名称,仅在27年前编写的程序中有用。 Graphics.DrawString()需要可缩放的字体轮廓,True-Type字体是特定的,并且不能使用设备字体。所以字体映射器开始提供替代方案,遗憾的是它不够聪明,无法识别你想要一个固定间距的字体。

使用“Courier New”代替修复问题。