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 = "";
}
...全文
8002 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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 不一样吗 外面套一层循环不得了
一款免费且现代的多平台游戏开发工具包。它具有低级和高级引擎系统、DirectX 11 和 OpenGL 支持、完整的资产管道、C# 脚本支持和功能齐全的编辑器。(注某些系统仍在开发中)女妖引擎一款免费且现代的多平台游戏开发工具包。它旨在提供简单而强大的环境来创建游戏和其他图形应用程序。它提供各种功能,从数学和实用程序库到 DirectX 11 和 OpenGL 渲染系统,再到资产处理、功能齐全的编辑器和 C# 脚本。Banshee 旨在成为游戏开发的标准,它提供已知和广泛使用技术的可靠实现,同时还具有足够的灵活性来实施不断变化的尖端技术。它从头开始构建一个现代库,使用现代设计原则 - 一切都尽可能模块化、分层和解耦,使修改、替换或添加功能更加容易。平台特定功能保持在最低限度,使移植尽可能简单。此外,每个非平凡方法、类和字段都有文档记录。强大而灵活的 C++ 核心之上是功能齐全的编辑器和 C# 脚本系统。C# 脚本可让您访问整个 .NET 库,从而简化您的开发,同时提供快速迭代时间,同时安全且易于编写。借助 C# 脚本,编辑器可完全扩展,因此您可以根据项目的确切需求对其进行

111,094

社区成员

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

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

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