获取 winform 中 flowlyaoutpanel 的子用户控件



我有一个FlowlyoutPanel,其中包含运行时添加的Usercontrols数。我想遍历所有内容并获取它们中的每一个,以便我可以玩它们的属性。 但是遵循方式不起作用,我无法在flowlayoutpanel

using (CareplusEntities context = new CareplusEntities())
{
foreach(Control ct  in flowLayoutPanel1.Controls)
{
ct.anyUserControlProperty;
}
}

您可能正在寻找OfType<TResult>()扩展方法:

foreach(var ct in flowLayoutPanel1.Controls.OfType<UserControlTypeHere>())
(
ct.UserControlProperty = value;
)

当然,您需要将UserControlTypeHere更改为实际用户控件的类型。

如果你只有一个类型,你喜欢搜索,你可以使用OfType<>()LINQ mehtod:

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);
}
}
}

最新更新