C#如何在执行命令时放置变量

时间:2017-03-26 06:54:12

标签: c#

界面有很多文本框,目前我必须使用以下内容:

private string[] preset_lines = new string[19];
    .....

      if (!String.IsNullOrEmpty(textBox19.Text))
                {
                    preset_lines[18] = textBox19.Text;
                }
                if (!String.IsNullOrEmpty(textBox20.Text))
                {
                    preset_lines[19] = textBox20.Text;
                }
    .....

我希望我可以将文本框序列放在一个循环中,所以它看起来像:

for (int i==0;i<20;i++)
{
 if (!String.IsNullOrEmpty(textBox20.Text))
                    {
                        preset_lines[19] = textBoxi.Text;
                    }
}

任何想法如何做到这一点?感谢

3 个答案:

答案 0 :(得分:1)

一个简单的解决方案,不需要你重构你的代码就是把你的文本框放在一个数组中:

TextBox[] textBoxes = new []
{
    textBox1, textBox2, textBox3,
    textBox4, textBox5, textBox6,
    textBox7, textBox8, textBox9,
    textBox10, textBox11, textBox12,
    textBox13, textBox14, textBox15,
    textBox16, textBox17, textBox18,
    textBox19, textBox20
};

然后简单地循环遍历它们:

for(int i = 0; i < preset_lines.Length; i++)
   if (!String.IsNullOrEmpty(textBoxes[i].Text))
       preset_lines[i] = textBoxes[i].Text;

答案 1 :(得分:0)

您还可以在控件中的所有文本框上执行foreach循环:

foreach (Control c in this.Controls)
        {
            if (c is TextBox)
            {
                if (!String.IsNullOrEmpty(c.Text))
                {
                    preset_lines[19] = c.Text;
                }
            }
        }

顺便说一句,你的for循环不会编译(因为你应该声明整数i = 0):

for (int i==0;i<20;i++)

应该是:

for (int i=0;i<20;i++)

答案 2 :(得分:0)

另一种使用&#34;正确工具的方法&#34; - DataGridView

private BindingList<string> presetLines;

public YourForm()
{
    var tempList = Enumerable.Repeat(string.Empty, 20).ToList();
    _presetLines = new BindingList(tempList);
    yourDataGridView.DataSource = _presetLines;
}

当您更新DataGridView中的值时,它会自动更新BindingList

如果您不想要空值,可以在使用时过滤它们

var notEmptyValues = presetLines.Where(value => String.IsNullOrEmpty(value) == false);