2012-10-13 91 views
0

我的問題與標題中所述的一樣。如何使用IF語句來查找數組中的內容的字符串長度,然後使其顯示在Rich Text Box中,左側對齊?使用IF語句查找對齊數組中的字符串長度(Visual Basic)

注意到我的數組中有一個值是十進制數。

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,不過,它看起來類似他們沒有對齊。前兩個是,但之後他們沒有,我完全失去了。

+0

您需要提供一些代碼。很高興看到你迄今爲止做了什麼來解決這個問題,但至少對你來說顯示輸入(使用聲明性代碼)和你想要的輸出是很好的。我們中的很多人在發佈之前使用LINQPad等工具來測試我們的答案。如果你能給我們輸入代碼,它使我們的工作變得更容易。 – Enigmativity

+0

添加了我的代碼。我需要做到這一點,所以左側對齊在每列中對齊。我的教授說這可以使用IF語句來對抗這個長度,然後我猜想可以添加vbTabs。 – Brodoin

回答

1

那麼,除非你使用固定寬度的字體,否則字符串的長度並不相關。如果你是,你想要做的是使用String.PadLeft,而不是字符串的長度。

+0

我會的,但如果我做了一個循環來添加填充仍然可能沒有幫助,因爲數組的部分已不對齊。一些排隊與標題,一些在左邊,其他在右邊。 – Brodoin

1

爲了測量在像素的文本的長度,可以編寫

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

MeasureText方法具有與影響測量參數許多重載。問題是,你不能真正知道RichTextBox如何呈現和計算文本長度。但是,使用比例字體時,此方法將比僅計算文本中的字符數量更精確。見這個例子中,這兩條線有十個字符:

IIIIIIIIII
mmmmmmmmmm


UPDATE

使用標籤來格式化文本的說明。有兩列的示例,其中第二列從第五個選項卡位置開始。

Column #1        Column #2 

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

正如您所看到的,根據第一列中文本的長度,您必須在第二列之前添加不同數量的選項卡。在第一行中,第一列是空的,第二行中有一個短於標籤寬度的文本。在這兩種情況下,您需要插入5個選項卡。在第3行和第4行上,文字更長,您只需分別插入4個和3個標籤。

這讓您瞭解如何計算正確數量的選項卡。