c# - 如何使用 for 循环简化此代码以更新许多控件?
问题描述
我已经完成了以下代码并且运行良好。我想知道如何执行 for 循环将这段代码从 38 行清理为 2 行。
s0s.Text = seg[0].start.ToString("X8");
s0e.Text = seg[0].end.ToString("X8");
s1s.Text = seg[1].start.ToString("X8");
s1e.Text = seg[1].end.ToString("X8");
// .. many more ..
s19s.Text = seg[19].start.ToString("X8");
s19e.Text = seg[19].end.ToString("X8");
我显然可以进行seg[i]
替换,但是我该如何使用文本框呢?
解决方案
我想您可以使用Controls属性并调用OfType<T>()
来获取TextBoxes
您实例中的所有Form
实例
根据指定类型过滤 IEnumerable 的元素。
然后将结果转换为Dictionary
基于控件的Name
// this could potentially be done in the constructor
var dict = Controls.OfType<TextBox>().ToDictionary(x => x.Name);
for (int i = 0; i < 19; i++)
{
dict[$"s{i}s"].Text = $"{seg[i].Start:X8}";
dict[$"s{i}e"].Text = $"{seg[i].End:X8}";
}
注意:此代码未经测试,仅作为可能解决方案的指南
推荐阅读
- python - 用几个元素组成的向量平滑曲线?
- flutter - 如何在颤振中构建排序列表视图(按日期排序)
- javascript - 如何在带有 jQuery 的单选按钮上使用 if..else 语句
- javascript - 为什么 Object.values(services) 中的“离线”在其中存在“离线”时不正确
- html - 过渡不适用于下拉菜单
- django - Django queryset to string 在测试中不返回字符串
- git - 颤振:gitignore 被...忽略
- firebase - 没有为“对象”类型定义运算符“[]”。尝试定义运算符'[]'。尝试从 Firestore 获取数据时出错
- ruby-on-rails - 使计数器缓存列在 rails 中只读
- c++ - 使用模拟退火算法在 1000 个皇后问题中几乎 2 个程序的运行时间差异很大