我可以从sum2.text获取每2个字符(102030)我得到10,20,30 但我的问题是,按顺序精确选择那些数字10,20,30 我目前的代码输出:msgbox(10)msgbox(20)msgbox(30)但不会按顺序选择和替换那些确切的数字
我的代码:
For i = 0 To sum2.Text.Length - 1 Step 2 'grabs every 2 chars
Dim result = (sum2.Text.Substring(i, 2)) 'this holds the 2 chars
MsgBox(result) 'this shows the 2 chars
sum2.SelectionStart = i 'this starts the selection at i
sum2.SelectionLength = 2 'this sets the length of selection (i)
If sum2.SelectedText.Contains("10") Then
sum2.SelectedText = sum2.SelectedText.Replace("10", "a")
End If
If sum2.SelectedText.Contains("20") Then
sum2.SelectedText = sum2.SelectedText.Replace("20", "b")
End If
If sum2.SelectedText.Contains("30") Then
sum2.SelectedText = sum2.SelectedText.Replace("30", "c")
End If
我的问题是,它会正确显示sum2中的数字,但它会选择和替换所有或逐个替换。我认为问题在于选择长度
答案 0 :(得分:0)
以下是一些可以帮助您入门的代码:
For i = 0 To sum2.SelectedText.Length - 1 Step 2
MessageBox.Show(sum2.SelectedText.Substring(i, 2))
Next
答案 1 :(得分:0)
好的,我的尝试来自于我理解你想要做的事情。问题是,当你替换" 10"时,你试图改变循环正在使用的字符串。与" a"所以你需要创建一个变量来保存新构建的字符串。
Dim part As String = ""
Dim fixed As String = ""
For i = 0 To Sum2.SelectedText.Length - 1 Step 2
part = Sum2.SelectedText.Substring(i, 2)
Select Case part
Case "10"
part = part.Replace("10", "a")
Case "20"
part = part.Replace("20", "b")
Case "30"
part = part.Replace("30", "c")
End Select
fixed &= part
Next
Sum2.SelectedText = fixed
当然,这只是为了展示在字符串中移动并更改它的工作方式。您需要使用新格式化的结果替换所选文本(在本例中为已修复)
结果:ab3077328732
此外,您知道,如果这种格式不会干扰2位数,那么您可以简单地做一个
sub2.selectedtext.replace("10", "a").Replace("20", "b").Replace...
但是,如果你有一个2位数字,如05旁边的11,它将无法给出所需的结果,因为如果将1105更改为1a5。只是想一想。