界面有很多文本框,目前我必须使用以下内容:
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;
}
}
任何想法如何做到这一点?感谢
答案 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);