2016-06-29 51 views
1

假設我在TextBox1中以下字符串:FPO100200%10 & FORD *子串 - 參數超出範圍異常 - startIndex參數

現在,我有2個文本框,從TextBox1中的子串獲取數據。我有以下代碼:

Public Class Form1 
Private Function textmoves(mytext As String, indexchar As String) 
    Dim Index As Integer = mytext.IndexOf(indexchar) 
    Return Index 
End Function 
Private Sub Splittext() 
    Dim text As String = TextBox1.Text 
    TextBox2.Text = text.Substring(0, textmoves(text, "%")) 
    TextBox3.Text = text.Substring(textmoves(text, "%"), textmoves(text, "&")) 
End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Splittext() 
End Sub 

末級

我試着在texbox2獲得子FPO100200,然後在texbox3子串10

只要我添加了符合textbox3,它向我提出了一個超出範圍錯誤的論點。你能告訴我我做錯了什麼嗎?非常感謝!

LE:另外,如何在textbox1中自動更改文本而不按按鈕時自動使文本框填充數據?

回答

1

第二個參數是長度,而不是結束位置。第一個表達式與位置一起工作的原因是初始索引爲零。

要獲得"10"使用

TextBox3.Text = text.Substring(textmoves(text, "%")+1, textmoves(text, "&")-textmoves(text, "%")-1) 

或更好

Dim pos As Integer = textmoves(text, "%") 
TextBox2.Text = text.Substring(0, pos) 
TextBox3.Text = text.Substring(pos+1, textmoves(text, "&")-pos-1) 

Demo.

+0

是的,現在我看到了錯誤。謝謝。我還爲我原來的問題添加了一個編輯,但我現在已經太晚了。 –

+0

@CatalinCernat由於上次編輯與問題的其餘部分不符,獲得答案的最佳方式是發佈新問題。假設你有'Splittext'工作,你已經將它連接到'Button1_Click',現在你想擺脫這個按鈕。鏈接到這個問題,併發布更新的代碼。這應該爲你提供一個不適合評論的好答案(本質上,你需要聽文本框1的文本改變事件,並在'Splittext'中捕獲異常)。 – dasblinkenlight

1

您的第二個參數是當您從索引0開始但開始於%索引時&的索引。所以你需要從&指數中減去%指數。

TextBox3.Text = text.Substring(textmoves(text, "%"), textmoves(text, "&") - textmoves(text, "%")) 
+0

現在我明白了我的錯誤。謝謝。雖然我沒有得到10,但我得到了%10。建議波紋管的答案100%, –