在Winform中获得FlowlyaOutPanel的子级用户控件

时间:2018-10-23 07:45:50

标签: c# winforms

我有一个FlowlyoutPanel,其中包含在运行时添加的Usercontrols数量。我想遍历所有内容并获取它们中的每一个,以便可以使用它们的属性。但是以下方法不起作用,并且我无法将每个控件都放入flowlayoutpanel

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

2 个答案:

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