在TabPage中循环checkedlistbox

时间:2014-07-16 01:45:06

标签: c# winforms loops controls

搜索我的解决方案时 发现这篇文章是Loop through controls in TabControl
它确实帮助了我 我成功地创建了一个循环通过我需要的TabPage
但它只改变了第一个checkedlistbox(我知道为什么!)
我不明白的是如何改变我循环的所有项目 我知道我需要使用类似的东西:
_C.items.add(value);
这是代码:

foreach (TabPage TPage in ShiftsViewTab.TabPages)
            {
                if (TPage.Name.Equals("tabPage2"))
                {
                    var TabPageControlls = TPage.Controls;
                    foreach( Control _C in TabPageControlls)
                    if (_C is CheckedListBox)
                    {
                        checkedListBox1.Items.Clear();
                        foreach (string _Val in Settings.Default.ShiftList)
                        {
                            checkedListBox1.Items.Add(_Val);
                        }
                    }
                }

            }

试图使用:

foreach (TabPage TPage in ShiftsViewTab.TabPages)
            {
                if (TPage.Name.Equals("tabPage2"))
                {
                    var TabPageControlls = TPage.Controls;
                    foreach(CheckedListBox _C in TabPageControlls)
                        _C.Items.Clear();
                        foreach (string _Val in Settings.Default.ShiftList)
                        {
                            _C.Items.Add(_Val);
                        }
                    }
                }

            }

然后遇到其他控件的问题...
请告知
谢谢!

2 个答案:

答案 0 :(得分:1)

你可以用它。语法略有不同;它使用LINQ使代码更短。

基本上,前两行代码检查“tabPage2”是否存在,如果不存在则返回。

然后在foreach块中,OfType<>方法仅获取CheckedListBox类型的控件。

我还使用了AddRange,因此你可以消除最内部的foreach循环,但它需要额外的强制转换,我现在无法测试,以确保它的工作正常。< / p>

var tabPage2 = ShiftsViewTab.TabPages.Cast<TabPage>()
                            .SingleOrDefault(x => x.Name == "tabPage2");

if (tabPage2 == null)
    return;

foreach (var clb in tabPage2.Controls.OfType<CheckedListBox>())
{
    clb.Items.Clear();

    clb.Items.AddRange(Settings.Default.ShiftList.Cast<object>().ToArray());
}

答案 1 :(得分:0)

确定,
显然看起来不够深...... 在这里找到答案:
Convert 'Control' to textbox and assign it a value
这是工作代码:

foreach (TabPage TPage in ShiftsViewTab.TabPages)
            {
                if (TPage.Name.Equals("tabPage2"))
                {
                    var TabPageControlls = TPage.Controls;
                    foreach( Control _C in TabPageControlls)
                    if (_C is CheckedListBox)
                    {
                        ((CheckedListBox)_C).Items.Clear();
                        foreach (string _Val in Settings.Default.ShiftList)
                        {
                            ((CheckedListBox)_C).Items.Add(_Val);
                        }
                    }
                }

            }