簡體   English   中英

無法在VB.NET中連接多行文本框

[英]Can't concatenate multiline textbox in VB.NET

我被這個計算器困住了。

我有一個帶有多行選項的大型文本框。

我想單擊按鈕1並在文本框的第二 中打印數字1。 為此,我唯一能找到的是:

Select Case CType(sender, System.Windows.Forms.Button).Name
  Case "Btn1"
            TextBox1.Text = Environment.NewLine
            TextBox1.Text += CStr(1)
            '.....
End Select

但是,如果數字必須為“ 11”,因此我必須多次單擊同一按鈕,或者如果單擊另一個數字,則必須單擊“ 13”,然后整個文本將更改為該特定數字。 我想串聯文本框的第二行。

我想保存第一行以備后用

如果我嘗試TextBox1.Lines(1)=“ 1”,則會收到以下錯誤“索引超出數組范圍”

我已經有好幾天了,請幫我一下。

創建一個僅包含數字字符串的變量(例如s ),例如“ 1”,“ 11”或“ 137327”。 當您單擊數字以附加到數字字符串時,請將其與換行符一起分配給文本框:

s &= CStr(n)
TextBox1.Text = Environment.NewLine & s

在文本框中要求空白行似乎是非標准的。 確保這是您真正想要做的。

您可以執行以下操作:

Private Sub Buttons_Click(sender As Object, e As EventArgs) Handles Btn1.Click, Btn2.Click, _
        Btn3.Click, Btn4.Click, Btn5.Click, Btn6.Click, Btn7.Click, Btn8.Click, Btn9.Click, Btn0.Click

    Dim lines As New List(Of String)(TextBox1.Lines)
    While lines.Count < 2
        lines.Add("")
    End While
    lines(1) = lines(1) & DirectCast(sender, Button).Text
    TextBox1.Lines = lines.ToArray
End Sub

從評論中回答問題:

為什么我需要使用字符串數組而不是僅使用文本框的第二行?

TextBox的行內部存儲在Array中。 這就是Microsoft決定實施它的方式。 不幸的是,如果您嘗試訪問超出其邊界(大於其初始聲明的大小)的索引位置,數組的大小不會自動增長。 因此,如果您的TextBox中還沒有第二行,則您將訪問“超出范圍”的索引,從而導致錯誤。 我使用的是List ,它可以增長到您需要的大小。 我用內部數組的內容初始化List,然后向其添加空白行以確保它至少有兩行。 此方法將保留TextBox中已經存在的行。 一旦確定列表至少有兩行,就可以安全地訪問第二行並對其進行修改。 創建列表並修改第二行后,我將其轉換回數組,然后將其重新分配給文本框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM