【问题标题】:Foreach Loop of Controls in TableLayoutPanel (C# WinForms)TableLayoutPanel 中的 Foreach 控件循环(C# WinForms)
【发布时间】:2017-03-15 22:12:33
【问题描述】:

我有一个包含 16 个单元格的 TableLayoutPanel,每个单元格都有一个标签(代表时间)。

我正在尝试使用 foreach 循环将时间从列表添加到所有标签。

int i = 0;
foreach (Control ctrl in tableLayoutPanel1.Controls)
{
    if (ctrl is Label)
    {
        ctrl.Text = LessonsDAL.times[i];
    }
    i++;
}

虽然文本被添加到标签中,但循环似乎是以随机顺序将文本添加到标签中。我想知道是否有面板的属性或标签可以控制它们在 foreach 循环中被访问的顺序?这可能是一个简单的解决方案,但我就是找不到!

非常感谢您的帮助!

【问题讨论】:

    标签: c# winforms foreach


    【解决方案1】:

    修复你的 for 循环以提高速度和清晰度,因为每个循环都可能出现奇怪的集合,除非你先缓存它。

    TableLayoutControlCollection[] controls = tableLayoutPanel1.Controls;
    
    for (int i = 0; i < controls.Count; i++) {
        if (controls[i] is Label) {
            controls[i].Text = LessonsDAL.times[i];
        }
    }
    

    这确实取决于您在第一种情况下添加控件的方式,您可能想查看您的 win 表单代码并查看名称/ID,您还可以为每个控件指定一个标签,然后在 LessonsDAL 下有一个字典.times 将采用标签名称并输出文本。

    【讨论】:

    • 我不认为我按照它们在表格布局面板中的顺序添加它们,但我只是认为它们所在的单元格会决定顺序?你知道如果这是问题我可能需要做些什么来解决这个问题吗?
    • connect.microsoft.com/VisualStudio/feedback/details/767282/… 显示了一个可能影响您的错误。当您添加它们时,它们会被添加到集合的末尾,而不是插入它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多