Как динамически создать сетку данных с панелью? - PullRequest
0 голосов
/ 16 января 2019

Я француз, извините за мой плохой английский ... Но я надеюсь, что вы мне поможете;)

Я разрабатываю софт на c # с большим количеством хранилища информации в БД, например информации о людях.

Я хочу отобразить эту информацию с красивым пользовательским интерфейсом, например:

Для этого я создал:

  • первая панель в Visual
  • класс для динамического создания вложенной панели

Я делаю цикл и для каждого человека я вызываю метод «createPanel» с информацией о каждом человеке, и эти созданные субпанели добавляются в родительскую панель. Идентификатор каждого человека сохраняется в параметре «tag» на дополнительной панели.

Все работает нормально, но я не знаю, как добавить событие в каждую подпанель. Как видно из приведенной выше ссылки, пользователь может нажать на закладку или значок для отображения меню (раунд с 3 точками = значок «меню»).

У меня вопрос, как динамически добавить событие для каждой вложенной панели? Например, я хочу отобразить меню для каждой дополнительной панели, когда я нажимаю на значок «меню», получаю хранилище идентификаторов в «теге» дополнительной панели и показываю новую форму для управления информацией.

Спасибо за помощь, я могу добавить свой код, если необходимо:)

1 Ответ

0 голосов
/ 17 января 2019

Создайте собственный пользовательский элемент управления для отображаемых панелей, содержащий все элементы управления из нужного набора инструментов.

public partial class MyControl : UserControl
{
  ...
}

В «MyControl» вы определяете события для всех вещей, которые могут произойти и должны обрабатываться извне элемента управления. Такой же как например «SelectedIndexChanged» для выпадающего списка.

Ваш класс управления будет выглядеть так:

public partial class MyControl : UserControl
{
   public event EventHandler<MyImportantEventA> OnImportantThingHappend;

   //Event-Invoker
   protected virtual void OnOnImportantThingHappend(MyImportantEventA e)
        {
            OnImportantThingHappend?.Invoke(this, e);
        }
}

//Data of your event. Customize as you like/need.
public class MyImportantEventA : EventArgs   
 {
            public string Message { get; set; }
 }

Когда вы добавляете свой элемент управления динамически, привязывайте к событию (ям) вашего элемента управления:

myUserControl.OnImportantThingHappend += DoSomethingWithEvent;

Вещи, с которыми элемент управления может справиться самостоятельно, не нужно показывать как события. E.g.:

«Закрыть» может быть чем-то, что должно обрабатываться извне. Вам нужно удалить элемент управления, изменить расположение элементов управления и т. Д.

«Показать детали», вероятно, является чем-то, что может быть обработано полностью внутри вашего контроля. Ваш элемент управления отображает окно сообщения или необычную подсказку.

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