0

私の質問は、タイトルに書かれている通りです。IFステートメントを使用して配列内のコンテンツの文字列長を検索し、左側を揃えてリッチテキストボックスに表示されるようにするにはどうすればよいでしょうか。

私の配列の1つの値がDecimalであることに注意してください。

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 the FillArray sub to fill the array
        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 the Calculate sub for calculation
        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 the Output sub to configure the output.
        Call Output(numIn, decRowTotal)

    End Sub

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

        Dim intR As Integer = 0
        Dim intC As Integer = 0
        'Set header for output.
        strOut = "ID" & vbTab & "Item" & vbTab & vbTab & vbTab & "Size" & _
            vbTab & vbTab & vbTab & vbTab & "Total Price" & _
            vbCrLf & "---------- ... -------------------------" & vbCrLf

        'For loop to add each line to strOut, setting
        'the RowTotalIn to currency.
        For intC = 0 To 24
            strOut &= strNumber(intC) & vbTab
            strOut &= strName(intC) & vbTab
            strOut &= strSize(intC) & vbTab
            strOut &= RowTotalIn(intC).ToString("c") & vbCrLf
        Next
        'Add strOut to rbtAll
        rtbAll.Text = strOut
    End Sub
End Class

出力:

P0001コーヒー-コロンビア最高24/ケース:プレグラウンド1.75オンスバッグ$ 16.50

P0002コーヒー-ヘーゼルナッツ24/ケース:プレグラウンド1.75オンスバッグ$ 24.00

P0003コーヒー-マイルドブレンド24/ケース:プレグラウンド1.75オンスバッグ$ 20.50

P0004コーヒー-各種フレーバー18/ケース。プレグラウンド1.75オンスバッグ$23.50

P0005コーヒー-カフェイン抜き24/ケース:プレグラウンド1.75オンスバッグ$ 20.50

出力にvbTabsが表示されますが、それでも、位置合わせされていないという点で似ています。最初の2つはそうですが、その後はそうではなく、私は完全に失われます。

4

2 に答える 2

1

固定幅フォントを使用していない限り、文字列の長さはあまり関係ありません。もしそうなら、あなたがしたいことは、文字列の長さではなく、String.PadLeft を使用することです。

于 2012-10-13T03:53:08.637 に答える
1

テキストの長さをピクセル単位で測定するには、次のように記述できます。

pixels = System.Windows.Forms.TextRenderer.MeasureText(text, font)

MeasureTextメソッドには、測定に影響を与える引数を持つ多くのオーバーロードがあります。RichTextBox問題は、 がテキストの長さをどのようにレンダリングして計算するかを実際に知ることができないことです。ただし、この方法は、プロポーショナル フォントを使用する場合にテキスト内の文字数をカウントするよりも正確な結果をもたらします。次の例を参照してください。どちらの行も 10 文字の長さです。

うううううううううううう


アップデート

タブを使用してテキストをフォーマットする際の注意。2 列目が 5 番目のタブ位置から始まる 2 列の例。

Column #1                               Column #2

------>|------>|------>|------>|------>|Some text
Short->|------>|------>|------>|------>|Some more text
A bit longer-->|------>|------>|------>|Even more text
An even longer text--->|------>|------>|The last one

ご覧のとおり、最初の列のテキストの長さに応じて、2 番目の列の前に異なる数のタブを追加する必要があります。最初の行の最初の列は空で、2 行目にはタブ幅よりも短いテキストがあります。どちらの場合も、5 つのタブを挿入する必要があります。3 行目と 4 行目では、テキストが長くなり、それぞれ 4 つと 3 つのタブを挿入するだけで済みます。

これにより、正しいタブ数を計算する方法がわかります。

于 2012-10-13T15:45:56.383 に答える