代码: -
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 :(得分:0)
您将TextBox对象与其Text属性混淆
如果我理解正确,您希望List<string>
仅包含非空文本框的文本,那么您的代码应该是这样的
spelersSpel.Clear();
foreach (TextBox item in spelers)
{
if (item != null && !string.IsNullOrWhiteSpace(item.Text))
spelersSpel.Add(item.Text);
}
请注意,您声明数组包含7个TextBoxes(索引从0到6),但是您只添加了6个文本框,因此您需要始终对NULL进行检查,因为当您遍历元素时,您有一个NULL在索引6的数组中输入。所以,也许,如果你只有6个文本框,最好用
声明数组 public TextBox[] spelers = new TextBox[6];
接下来,在click事件中,您执行两个循环来填充列表,这当然会复制列表内容。
但是,我认为更好的方法是直接使用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();
}
}
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
您可以通过以下方式获取输入计数:
spelersSpel.Clear();
foreach (TextBox item in spelers)
{
if (item != null && item.Text.Trim() != "") //check if null or empty
spelersSpel.Add(item.Text);
}