0

我正在处理与上一个问题相同的程序,但现在我无法对齐我现在修复的程序的输出。我知道其中一些可能看起来很乱,但不知何故我让它工作了。

无论如何,输出与我的标题不一致,看起来不太好。我无法弄清楚如何解决这个问题。

Imports System.IO
Imports System.Convert

Public Class frmAll
'Declare Streamreader
Private objReader As StreamReader


'Declare arrays to hold the information
Private strNumber(24) As String
Private strName(24) As String
Private strSize(24) As String
Private decCost(24) As Integer




Private Sub frmAll_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'Set objReader
    objReader = New StreamReader("products.csv")
    Call FillArray()
End Sub

Private Sub FillArray()
    'Declare variables and arrays

    Dim decCost(24, 1) As Decimal
    Dim strFields() As String
    Dim strRec As String
    Dim intCount As Integer = 0
    Dim chrdelim As Char = ToChar(",")
    'Set strRec to read the lines

    strRec = objReader.ReadLine

    'Do while loop to fill array.
    Do While strRec <> Nothing
        strFields = strRec.Split(chrdelim)
        strNumber(intCount) = strFields(0)
        strName(intCount) = strFields(1)
        strSize(intCount) = strFields(2)
        decCost(intCount, 0) = ToDecimal(strFields(3))
        decCost(intCount, 1) = ToDecimal(strFields(4))
        'Set strRec to read the lines again
        strRec = objReader.ReadLine
        'increment the index
        intCount += 1
    Loop
    Call Calculate(decCost)
End Sub

Private Sub Calculate(ByVal numIn(,) As Decimal)
    'Define arrays to hold total cost
    Dim decRowTotal(24) As Decimal

    'Define variables to hold the counters for rows and columns
    Dim intR As Integer
    Dim intC As Integer

    'Calcualte total cost
    For intC = 0 To 1
        For intR = 0 To 24
            decRowTotal(intR) += numIn(intR, intC) * 1
        Next
    Next

    Call Output(numIn, decRowTotal)

End Sub

Private Sub Output(ByVal NumIn(,) As Decimal, ByVal RowTotalIn() As Decimal)
    Dim strOut As String

    Dim intR As Integer = 0
    Dim intC As Integer = 0

    strOut = "ID" & vbTab & "Item" & vbTab & vbTab & vbTab & "Size" & vbTab & vbTab & vbTab & vbTab & "Total Price" &
        vbCrLf & "--------------------------------------------------------------------------------------------------------------------------------------------------" &
        vbCrLf

    For intC = 0 To 24
        strOut &= strNumber(intC) & vbTab
        strOut &= strName(intC) & vbTab
        strOut &= strSize(intC) & vbTab & vbTab
        strOut &= RowTotalIn(intC).ToString("c")
        strOut &= vbCrLf

    Next



    rtbAll.Text = strOut


End Sub


End Class
4

1 回答 1

0

您为此类工作使用了错误的工具。
您需要一个 DataGridView 而不是 RichTextBox。
使用 DataGridView,您可以随意调整列大小。

使用制表符在 Richtextbox 中创建伪列的方法失败了,因为如果某些文本(例如项目列)比用于表示制表符的空间长,那么下一个制表符将移动到最右边的位置并贯穿其余部分文本未对齐的行。您可以尝试尽量减少添加或删除选项卡的问题,但是,除非文本像素长度等于为选项卡保留的长度,否则您的列将不对齐。

在下面提供的链接中,您将找到一个简单的未绑定数据网格视图的示例,其中填充了字符串数据。

http://msdn.microsoft.com/en-us/library/5s3ce6k8(v=vs.100).aspx

于 2012-10-10T21:14:32.527 回答