C#脚本简化需求

i逐浪 2020-11-27 05:45:25
请教各位,如何简化以下C#脚本,能否合并到一个foreach 语句下?

foreach (Control ctrl in groupBox1.Controls)
{
if (ctrl is TextBox || ctrl is ComboBox)
ctrl.Text = "";
}

foreach (Control ctrl2 in panel1.Controls)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}
foreach (Control ctrl2 in panel2.Controls)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}
foreach (Control ctrl2 in panel3.Controls)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}
foreach (Control ctrl2 in panel4.Controls)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}
...全文
7999 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zijiang001 2020-11-30
  • 打赏
  • 举报
回复
这种方式用递归实现吧 void resetControl(Control parentControl){ foreach (Control ctrl in parentControl.Controls) { if (ctrl is GroupBox){ resetControl(ctrl); } else if (ctrl is Panel){ resetControl(ctrl); } else if (ctrl is TextBox){ ctrl.Text = ""; } else if (ctrl is ComboBox){ ctrl.Text = ""; } } //调用 resetControl(this);
SayoKun 2020-11-30
  • 打赏
  • 举报
回复
引用 10 楼 正怒月神 的回复:
你就做成一个方法,传入 控件,遍历控件中的control就是了。
public void Test(Control ctr)
{
foreach (Control ctrl in ctr.Controls)
            {
                if (ctrl is TextBox || ctrl is ComboBox)
                    ctrl.Text = "";
            }
}
谈不上什么优化, 只是精简,重用了方法。
版主的这套做法比较合适,不但降低了代码的重复度还可以降低需求变更带来的影响。
正怒月神 2020-11-30
  • 打赏
  • 举报
回复
你就做成一个方法,传入 控件,遍历控件中的control就是了。
public void Test(Control ctr)
{
foreach (Control ctrl in ctr.Controls)
            {
                if (ctrl is TextBox || ctrl is ComboBox)
                    ctrl.Text = "";
            }
}
谈不上什么优化, 只是精简,重用了方法。
  • 打赏
  • 举报
回复
要注意,通常强调实践逻辑和审查流程的人更懂原理。反而是对自己的地位、程序设计流程经常选择性失意,经常跟同时争吵某些具体代码对的人,其实不太懂编程原理。
  • 打赏
  • 举报
回复
基本上,用“大白话”把逻辑重新理顺了,才能简化。如果你们的需求文档和详细设计文档的层次就是“细碎”到具体类型的控件,那么你就不应该“简化”。如果你想简化,你要首先统一思想,让相关的各方面提需求、参与讨论设计、参与写和维护代码、审核产品质量等等的人都承认“xxxx范围的这些控件内嵌对的所有文本框和下拉框”这样的一致性检验,你要仔细检查自己说的这个集合的范围是否严谨、准确、没有反而制造麻烦,然后就可以简化。

简而言之,如果你们用大白话能把所要简化的控件放到某个UI范围中,或者某个编程List结构中,你可以先理顺逻辑语言,然后改代码。没必要为了改代码而改代码。
八爻老骥 2020-11-27
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
不必简化,不值得简化
程序员应该集中精力完成最值得花时间的东西

这里不值得,而且做完后,你会发现更郁闷。明天你的领导带着他的头来看结果,那个头,掐着叉腰肌说“嗯,我觉着,这个摆这里,那个摆那里,这个和这个调一下位置,那个下拉框给个提示,这个textbox 里面打个横线”

楼上几位废劲简化的兄弟们,你们哭不哭


就事论事,咱只解决楼主的问题。
wanghui0380 2020-11-27
  • 打赏
  • 举报
回复
不必简化,不值得简化 程序员应该集中精力完成最值得花时间的东西 这里不值得,而且做完后,你会发现更郁闷。明天你的领导带着他的头来看结果,那个头,掐着叉腰肌说“嗯,我觉着,这个摆这里,那个摆那里,这个和这个调一下位置,那个下拉框给个提示,这个textbox 里面打个横线” 楼上几位废劲简化的兄弟们,你们哭不哭
八爻老骥 2020-11-27
  • 打赏
  • 举报
回复
引用 2 楼 icoolno1 的回复:


List<Control> all=new List<Control>();
all.AddRange(groupBox1.Controls);

foreach (Control ctrl2 in all)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}


List<Control> all=new List<Control>();
all.AddRange(groupBox1.Controls);
all.AddRange(groupBox2.Controls);
all.AddRange(groupBox3.Controls);
all.AddRange(groupBox4.Controls);

foreach (Control ctrl2 in all)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}
[/code]
真的小白啊 2020-11-27
  • 打赏
  • 举报
回复
我有一个不成熟的想法:先把你需要修改的控件继承出来,然后就是遍历了

	public partial class Form1 : Form
	{
		private List<Control> _allControls;

		public Form1()
		{
			InitializeComponent();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			GetAllControls();
		}

		private void GetAllControls()
		{
			foreach (Control ctrl1 in Controls)
			{
				_allControls.Add(ctrl1);
			}

			foreach (Control ctrl2 in panel1.Controls)
			{
				_allControls.Add(ctrl2);
			}

			foreach (Control ctrl3 in panel2.Controls)
			{
				_allControls.Add(ctrl3);
			}
		}

		private void SetMyControlValue()
		{
			foreach (Control ctrl in _allControls)
			{
				if (ctrl is MyTextBox || ctrl is MyComboBox)
				{
					ctrl.Text = "";
				}
			}
		}
	}

八爻老骥 2020-11-27
  • 打赏
  • 举报
回复


List<Control> all=new List<Control>();
all.AddRange(groupBox1.Controls);

foreach (Control ctrl2 in all)
{
if (ctrl2 is TextBox || ctrl2 is ComboBox)
ctrl2.Text = "";
}

qq_30335331 2020-11-27
  • 打赏
  • 举报
回复
不就是controls 不一样吗 外面套一层循环不得了

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧