【问题标题】:Can't concatenate multiline textbox in VB.NET无法在 VB.NET 中连接多行文本框
【发布时间】:2014-11-19 22:53:23
【问题描述】:

我被这个计算器卡住了。

我有一个带有多行选项的大文本框。

我想点击按钮 1 并在我的文本框的 second line 中打印第一个。 为此,我唯一能找到的是:

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" 我收到以下错误“索引超出了数组的范围”

我已经用了好几天了,请帮帮我。

【问题讨论】:

    标签: vb.net textbox concatenation line multiline


    【解决方案1】:

    你可以这样做:

    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
    

    回答cmets的问题:

    为什么我需要使用字符串数组而不是仅仅使用 我的文本框的第二行?

    TextBox 的行内部存储在一个数组中。这就是微软决定实施它的方式。不幸的是,如果您尝试访问超出其边界(大于其最初声明的大小)的索引处的位置,则数组不会自动增大大小。因此,如果您的 TextBox 中还没有第二行,那么您将访问一个“超出范围”的索引,从而导致错误。我使用的是一个List,它可以增长到你需要的任何大小。我用内部数组的内容初始化列表,然后向它添加空行以确保它至少有两行。这种方法将保留文本框中已经存在的行。一旦我确定 List 至少有两行,就可以安全地访问第二行并对其进行修改。构建 List 并修改第二行后,我将其转换回 Array 并将其重新分配给 TextBox。

    【讨论】:

    • 为什么我需要使用字符串数组而不是只使用文本框的第二行?
    【解决方案2】:

    创建一个仅包含数字字符串的变量(例如,s,在本例中),例如“1”、“11”或“137327”。 当您单击要附加到数字字符串的数字时,将其与换行符一起分配给文本框:

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

    在文本框中要求空行似乎是不标准的。确保这是你真正想做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多