我有一个代码可以删除我在面板中创建的文本框和datetimepicker ...删除代码适用于所有TEXTBOX,但是当其删除datetimepickers的时间不删除所有datetimepicker时。 示例:运行代码时有4个文本框和4个datetimepicker,面板将删除所有4个文本框,但仅删除2个datetiepickes。我真的无法找出问题所在。请帮助我...谢谢!
代码在这里:
update services
set properties = replace(properties,'example','domain')::jsonb
where properties::json->>'url' = 'www.example.com';
答案 0 :(得分:0)
按现状,您正在枚举时修改集合,这是不允许的。 For Each
循环枚举了一个集合,因此不允许您在循环内添加或删除项目。当您放置控件时,会将其从其父容器中移除,因此您正在修改该父对象的Controls
集合。
OfType
方法实际上不会生成新的项目集合,而是枚举它所调用的集合,并逐一产生指定类型的项目。因此,枚举OfType
的结果意味着同时枚举源集合。
通过调用ToArray
,您首先完成源集合的枚举,并使用指定类型的项填充数组,然后使用For Each
循环枚举该数组。放置控件对数组没有影响,所以没有问题。
For Each ctrlTxt In panelGroupDependent.Controls.
OfType(Of TextBox)().
ToArray()
ctrlTxt.Dispose()
Next
For Each ctrlDtp In panelGroupDependent.Controls.
OfType(Of DateTimePicker)().
ToArray()
ctrlDtp.Dispose()
Next
请注意,由于可以推断出循环控制变量的类型,因此也无需声明。