2015-04-12 56 views
0

代碼: -使文本框的列表

public partial class Players : Form 
{ 
    public TextBox[] spelers = new TextBox[7]; 
    List<string> spelersSpel = new List<string>(); 
    public Form1 game = new Form1(); 
    public Players() 
    { 
     InitializeComponent(); 
     spelers[0] = inputSpeler1; 
     spelers[1] = inputSpeler2; 
     spelers[2] = inputSpeler3; 
     spelers[3] = inputSpeler4; 
     spelers[4] = inputSpeler5; 
     spelers[5] = inputSpeler6; 
    } 

    private void btnSpelers_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < spelers.Length; i++) 
     { 
      if (spelers[i] != null) 
       spelersSpel.Add(spelers[i].Text); 

     } 

     foreach (TextBox item in spelers) 
     { 
      if (item != null) 
       spelersSpel.Add(item.Text); 
     } 
     MessageBox.Show(spelersSpel.Count.ToString()); 
     game.ShowDialog(); 
    } 
} 

我有6個文本框,我已經投入到一個數組。然後我想把這個數組放到一個表單中。因爲我不知道從文本框得到多少輸入,所以我不使用數組。但是當我想看看我的名單有多大。這是說6.如果我只在第一個文本框中鍵入文本,列表應該是1.

我在做什麼錯了?

+0

爲什麼使用數組?只需創建一個列表並使用foreach循環或LINQ語句迭代它即可 –

回答

0

您正在將TextBox對象與其Text屬性混淆。
如果我理解正確的話,你希望List<string>到只包含非空的文本框的文本,所以你的代碼應該是這樣的

spelersSpel.Clear(); 
    foreach (TextBox item in spelers) 
    { 
     if (item != null && !string.IsNullOrWhiteSpace(item.Text)) 
      spelersSpel.Add(item.Text); 
    } 

請注意,您聲明數組包含7個文本框(指數從0到6),但是你只添加了6個文本框,所以你總是需要檢查NULL,因爲當你遍歷你的元素時,你的數組在索引6處有一個NULL條目。所以,如果你有隻有6文本框最好是陣列與

public TextBox[] spelers = new TextBox[6]; 

接下來聲明,在點擊事件,你執行兩個循環來填充列表,這當然會複製列表內容。

但是,我認爲,更好的辦法是直接使用List<TextBox>,與它合作,擺脫陣列和List<string>

public partial class Players : Form 
{ 
    public List<TextBox> spelers; 
    public Form1 game = new Form1(); 

    public Players() 
    { 
     InitializeComponent(); 
     spelers = new List<TextBox>() 
     { 
      inputSpeler1, inputSpeler2, inputSpeler3, 
      inputSpeler4, inputSpeler5, inputSpeler6 
     } 
    } 

    private void btnSpelers_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(spelers 
        .Count(x => !string.IsNullOrWhiteSpace(x.Text)) 
        .ToString()); 
     game.ShowDialog(); 
    } 
} 
0

因爲(spelers [I]!= NULL)和( item!= null)不檢查文本框是否爲空;這意味着數組元素爲空或不是。

如果你想檢查你的文本框是否爲空,你應該找到屬性Text;

if (item.Text != "") 

我無法使用我的IDE,但它不確定,但試試這個。

public partial class Players : Form 
{ 
    public TextBox[] spelers = new TextBox[6]; // [7]; 
    List<string> spelersSpel = new List<string>(); 
    public Form1 game = new Form1(); 
    public Players() 
    { 
     InitializeComponent(); 
     spelers[0] = inputSpeler1; 
     spelers[1] = inputSpeler2; 
     spelers[2] = inputSpeler3; 
     spelers[3] = inputSpeler4; 
     spelers[4] = inputSpeler5; 
     spelers[5] = inputSpeler6; 
    } 
    private void btnSpelers_Click(object sender, EventArgs e) 
    { 
     /* 
     // 1. 
     for (int i = 0; i < spelers.Length; i++) 
     { 
      if (spelers[i] != null) { 
       throw new Exception("NullTextBoxException"); 
      } 
      else if (spelers[i].Text == "") { 
       // skip when the textbox is empty 
       continue; 
      } 
      spelersSpel.Add(spelers[i].Text); 
     } 
     */ 

     foreach (TextBox item in spelers) 
     { 
      if (item != null) { 
       // throw exception when referring textbox is null 
       throw new Exception("NullTextBoxException"); 
      } 
      else if (item.Text == "") { 
       // skip when the textbox is empty 
       continue; 
      } 
      spelersSpel.Add(item.Text); 
     } 

     MessageBox.Show(spelersSpel.Count.ToString()); 
     game.ShowDialog(); 
    } 
} 
+0

感謝您的回答! – Jenssen

0

你可以通過這種方式輸入計數:

spelersSpel.Clear(); 
foreach (TextBox item in spelers) 
{ 
    if (item != null && item.Text.Trim() != "") //check if null or empty 
    spelersSpel.Add(item.Text); 
}