C# 在TabPage中循环checkedlistbox
在搜索我的解决方案时 找到这篇文章C# 在TabPage中循环checkedlistbox,c#,winforms,loops,controls,C#,Winforms,Loops,Controls,在搜索我的解决方案时 找到这篇文章 它确实帮助了我 我成功地通过所需的选项卡页创建了一个循环 但它只会更改第一个checkedlistbox(我知道为什么!) 我不明白的是如何更改我循环的所有项目 我知道我需要使用类似于: \u C.项目添加(值) 这是代码: foreach (TabPage TPage in ShiftsViewTab.TabPages) { if (TPage.Name.Equals("tabPage2"))
它确实帮助了我
我成功地通过所需的选项卡页创建了一个循环
但它只会更改第一个checkedlistbox(我知道为什么!)
我不明白的是如何更改我循环的所有项目 我知道我需要使用类似于:
\u C.项目添加(值)代码>
这是代码:
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);
}
}
}
}
但随后遇到其他控件的问题…
请告知
谢谢 好的,
显然看得不够深…
在这里找到答案:
这是工作代码:
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);
}
}
}
}
你可以用这个。语法有点不同;它使用LINQ来缩短代码
基本上,前两行代码检查“tabPage2”是否存在,如果不存在则返回
然后在foreach
块中,type
方法的只获取类型CheckedListBox
的控件
我还使用了AddRange
,因此您可以消除最内部的foreach
循环,但它需要额外的强制转换,目前我无法测试它是否能够完全正常工作
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());
}
var tabPage2=ShiftsViewTab.TabPages.Cast()
.SingleOrDefault(x=>x.Name==“tabPage2”);
if(tabPage2==null)
返回;
foreach(tabPage2.Controls.OfType()中的var clb)
{
clb.Items.Clear();
clb.Items.AddRange(Settings.Default.ShiftList.Cast().ToArray());
}
我知道它使用上面的代码循环所有需要的控件(checkedlistbox),但是由于某种原因,第一个checkedlistbox(硬编码)更改了7倍,我在var tabPage2=ShiftsViewTab.TabPages.Cast.SingleOrDefault(x=>x.Name==“tabPage2”)上得到一个错误代码>Cast上的错误
它已经在using语句中,我得到的错误是:错误1'System.Data.EnumerableRowCollectionExtensions.Cast(System.Data.EnumerableRowCollection)'是一个“方法”,在给定的上下文中无效。您可以更改或解释它应该是什么样的吗?(谢谢)。。。。知道了。。。谢谢虽然我自己(以不同的方式)弄明白了,但这个看起来更简单。。。谢谢