在我学习编码的过程中,最近通过线程阅读了很多内容!
从本质上讲,我所知道的只是自学而且非常基础,所以我想开始变得更专业
我想缩短这些代码(以最简单的方式),因为我经常会得到非常重复的代码!这是一个主要的例子
private void button2_Click(object sender, EventArgs e)
{
textBox1.Clear();
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
textBox5.Clear();
textBox6.Clear();
textBox7.Clear();
textBox8.Clear();
textBox9.Clear();
textBox10.Clear();
textBox11.Clear();
textBox12.Clear();
}
对于上下文,我无法清除表单上的所有文本框,因为textBox13
总是有一个我无法删除的有用值!
编辑*文本框1到6在groupBox1
中,textBoxes 7-12在groupBox2
中。这看起来很重要;我只是使用groupbox工具来清除程序!
如果有人可以提供帮助,我将非常感激!请记住,我仍然是编码新手,所以我不熟悉一些功能。
以下是该计划的图片帮助!
答案 0 :(得分:2)
假设您所有的文本框名称以您显示的格式开头,您可以使用:
foreach (Control control in Controls)
{
if (control.Name.StartsWith("textBox") && !control.Name.EndsWith("13") && control.GetType() == typeof(TextBox))
{
TextBox textBox = (TextBox)control;
textBox.Clear();
}
}
如果您希望它与组框一起使用,请通过调用ClearTextBoxes来使用此代码(只需编写“ClearTextBoxes();”)
private void ClearTextBoxes()
{
foreach (Control control in Controls)
{
ClearTextBox(control);
}
}
private void ClearTextBox(Control control)
{
if (control.GetType() == typeof(TextBox))
{
if (control.Name.StartsWith("textBox") && !control.Name.EndsWith("13"))
{
TextBox textBox = (TextBox)control;
textBox.Clear();
}
}
else if (control.GetType() == typeof(GroupBox))
{
GroupBox groupBox = (GroupBox)control;
foreach (Control groupBoxControl in groupBox.Controls)
{
ClearTextBox(groupBoxControl);
}
}
}
答案 1 :(得分:0)
当前设置不允许您快速清除所有内容,因为每个变量即使它们具有相同类型和相似名称,也是不同的实体,您无法迭代它们。
无论如何,你可以将它们分组在一个数组中并像这样迭代它们:
// Fill this array in an Init function
YourType[] textBoxes;
private void button2_Click(object sender, EventArgs e)
{
// Iterate through the whole array except for the last element
for(int i=0; i<textBoxes.Length-1; i++)
{
textBoxes[i].Clear();
}
}
答案 2 :(得分:0)
一种可能的解决方案是在列表中存储文本框
List<TextBox> textBoxes
然后使用 for 或 foreach 循环并调用 Clear()方法迭代此集合。
或使用扩展方法 ForEach()
textBoxes.ForEach(x => x.Clear());
答案 3 :(得分:0)
最简单的方法是准备一个包含所有文本框对象的集合
var textBoxes = new List<TextBox> { textBox1,textBox2,textBox3};// fill in the rest
并且只是与一个&#39; foreach&#39;在它上面
textBoxes.ForEach(textBox => textBox.Clear());
这是一个简单的建议。 您也可以使用反射来使其更隐含,但它不值得
答案 4 :(得分:0)
通常具有太多的特定控件可能表示您可以考虑使用不同类型的控件,但基于屏幕截图似乎并非如此。你可以使用array:
foreach (var t in new[] { textBox1, textBox2, textBox3 })
t.Clear();
如果控件直接在表单中,则为:
foreach (Control c in this.Controls)
if (c is TextBox && c.Name != "textBox13")
c.Text = ""; // .Text = "" is what TextBox.Clear() does
但因为控件在其他控件中:
foreach (Control c in this.groupBox1.Controls) if (c is TextBox) c.Text = "";
foreach (Control c in this.groupBox2.Controls) if (c is TextBox) c.Text = "";
或:
foreach (var gb in new[] { groupBox1, groupBox2 })
foreach (Control c in gb.Controls)
if (c is TextBox) c.Text = "";