我有一个FlowlyoutPanel
,其中包含在运行时添加的Usercontrols
数量。我想遍历所有内容并获取它们中的每一个,以便可以使用它们的属性。但是以下方法不起作用,并且我无法将每个控件都放入flowlayoutpanel
using (CareplusEntities context = new CareplusEntities())
{
foreach(Control ct in flowLayoutPanel1.Controls)
{
ct.anyUserControlProperty;
}
}
答案 0 :(得分:0)
您可能正在寻找OfType<TResult>()
扩展方法:
foreach(var ct in flowLayoutPanel1.Controls.OfType<UserControlTypeHere>())
(
ct.UserControlProperty = value;
)
当然,您需要将UserControlTypeHere
更改为实际用户控件的类型。
答案 1 :(得分:0)
如果只有一种类型,您想搜索,可以使用OfType<>()
LINQ方法:
foreach(var control in flowLayoutPanel1.Controls.OfType<MyUserControl>())
{
control.mySpecialProperty = Guid.NewGuid();
}
如果您具有多种控件类型,则需要某种调度程序。最简单的是某种Dictionary<Type, Action<Control>>
。
private static readonly Dictionary<Type, Action<Control>> _Dispatcher = new Dictionary<Type, Action<Control>>
{
{ typeof(MyControl), HandleMyFirstControl },
{ typeof(AnotherControl), HandleMySecondControl },
};
private static void HandleMyFirstControl(Control control)
{
var myControl = (MyControl)control;
myControl.MySpecialValue = 73;
}
private static void HandleMySecondControl(Control control)
{
var anotherControl = (AnotherControl)control;
anotherControl.Foo = Guid.NewGuid();
}
private void HandleControls()
{
foreach(var control in flowLayoutPanel.Controls)
{
if(_Dispatcher.TryGetValue(control.GetType(), out Action<Control> handler)
{
handler(control);
}
}
}