首页 > 解决方案 > 如何使用 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]替换,但是我该如何使用文本框呢?

标签: c#loopsfor-looptextbox

解决方案


我想您可以使用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}";
}

注意:此代码未经测试,仅作为可能解决方案的指南


推荐阅读