搜索我的解决方案时
发现这篇文章是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);
}
}
}
}
然后遇到其他控件的问题...
请告知
谢谢!
答案 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);
}
}
}
}