Получите детям UserControls от flowlyaoutpanel в winform - PullRequest
0 голосов
/ 23 октября 2018

У меня есть FlowlyoutPanel, который содержит число Usercontrols, добавленное во время выполнения.Я хочу пройтись по всем и получить каждый из них, чтобы я мог играть с их свойствами.Но следующий способ не работает, и я не могу получить каждый элемент управления внутри flowlayoutpanel

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

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если у вас есть только один тип, который вы хотите искать, вы можете использовать метод 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);
        }
    }
}
0 голосов
/ 23 октября 2018

Возможно, вы ищете OfType<TResult>() метод расширения:

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

Конечно, вам нужно изменить UserControlTypeHere на тип фактического пользовательского элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...