[英]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.