2013-09-24 36 views
1
string ip = ini.IniReadValue("Settings", "ip"); 
string[] ip2 = ip.Split('.'); 
foreach (var part in ip2) 
{ 
    textBox3.Text = part[0].ToString(); 
    textBox4.Text = part[1].ToString(); 
    textBox5.Text = part[2].ToString(); 
    textBox6.Text = part[3].ToString(); 
} 

嗨,大家好,我的問題是,textBox3剛中有一個1,在那裏,我希望它有123 爲了記錄在案, ip = 123.456.789.101用於測試目的。我怎樣才能分割字符串,然後將字符串的每個部分在文本框中

這是結果: result

而且它在設置textBox6時崩潰:索引超出了數組邊界。

回答

1

您的邏輯錯誤。

您的foreach循環的每次迭代都是整個字符串。因此,當您這樣做時:

part[NUMBER_HERE] 

..您正在訪問該字符串索引處的單個字符。

你得到的IndexOutOfBounds錯誤是因爲我上面說的。如果您訪問長度爲3(索引0,1和2)的字符串的索引3處的字符,它將超出限制。

你根本不想要循環。改變你的代碼:

string[] parts = ip.Split('.'); 
textBox3.Text = parts[0].ToString(); 
textBox4.Text = parts[1].ToString(); 
textBox5.Text = parts[2].ToString(); 
textBox6.Text = parts[3].ToString(); 

現在你有一個實際的字符串數組,你索引..不是一個單一的字符串。

+0

非常感謝!現在就開始工作了。 – user2813126

1

刪除foreach循環。

此行創建一個數組,每個數值在一個新的插槽中。

string[] ip2 = ip.Split('.'); 

但是,這然後將您的數組中的每個單獨的值,並訪問其第n個插槽。

foreach (var part in ip2){ 
    textBox3.Text = part[0].ToString(); 
    textBox4.Text = part[1].ToString(); 
    textBox5.Text = part[2].ToString(); 
    textBox6.Text = part[3].ToString(); 
} 

它會一直覆蓋你的數據與給定位置上的字符(由索引確定)。最後一項是101,這就是爲什麼文本框中的最後一個值是101。 只要刪除循環,你很好。

+0

非常感謝!現在就開始工作了。 – user2813126

0

這是因爲您正在迭代拆分的第一個結果。數組ip2包含分割結果(即ip2 [0] =「123」)。但是你寫part[0],並且由於部分包含分割的第一個結果(無論如何在第一次迭代中),所以部分[0]現在意味着「123」中的第一個字符當然是「1」。這裏有您需要做什麼:

string ip = ini.IniReadValue("Settings", "ip"); 
string[] ip2 = ip.Split('.'); 

textBox3.Text = ip2[0].ToString(); 
textBox4.Text = ip2[1].ToString(); 
textBox5.Text = ip2[2].ToString(); 
textBox6.Text = ip2[3].ToString(); 

理想情況下,你需要檢查是否拆分其分配到文本框之前返回足夠的結果也是如此。

+0

非常感謝!現在就開始工作了。 – user2813126

3

讓我們手動通過您的跟蹤代碼:

  1. ip2包含數組{"123", "456", "789", "101"}
  2. 您在陣列上在foreach循環迭代,然後,讓part成爲每個串"123""456""789""101"反過來的。
  3. 然後,您將索引到字符串(帶方括號)中,該字符串訪問字符串內的單個char s。因此,在通過,
    • part[0]第一環路是'1'
    • part[1]'2'
    • part[2]'3',和
    • part[3]超出了字符串(長度= 3)的邊界。

注意你需要調用ToString()也是一個很好的指標出事了。

相反,你要(不foreach環路),

string ip = ini.IniReadValue("Settings", "ip"); 
string[] ip2 = ip.Split('.'); 
textBox3.Text = ip2[0]; 
textBox4.Text = ip2[1]; 
textBox5.Text = ip2[2]; 
textBox6.Text = ip2[3]; 
+0

非常感謝!現在就開始工作了。 – user2813126

相關問題