制作TextBoxes列表

时间:2015-04-12 09:59:12

标签: c# arraylist

代码: -

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.

我做错了什么?

3 个答案:

答案 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);
}