繁体   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