Как извлечь данные из динамически создаваемого пользовательского элемента управления в C # - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть пользовательский элемент управления, в котором есть текстовые поля и средство выбора даты. Когда форма загружается, динамически генерируйте пользовательский элемент управления и отображайте в форме. (EventComponent (пользовательский элемент управления)).

Screenshot

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

public partial class InsertEventForm : Form
{
    private int numberOfEvent;

    public InsertEventForm(int numberOfEvent)
    {
        InitializeComponent();
        this.numberOfEvent = numberOfEvent;
    }

    private void InsertEventForm_Load(object sender, EventArgs e)
    {
        EventComponent[] eventComponents = new EventComponent[(int)this.numberOfEvent];
        int i = 0;

        Button backBTN = new Button();
        backBTN.Text = "Back";
        backBTN.Location = new Point(0, 10);
        backBTN.Size = new Size(50, 30);
        this.Controls.Add(backBTN);

    // generate user control dynamically here

        for ( i = 0; i < eventComponents.Length; i++)
        {
            eventComponents[i] = new EventComponent();
            System.Drawing.Point pLabel = new System.Drawing.Point(36, 50 + i * 280);
            eventComponents[i].Location = pLabel;
            eventComponents[i].Size = new System.Drawing.Size(358, 259);
            this.Controls.Add(eventComponents[i]);
        }

        Button saveBTN = new Button();
        saveBTN.Text = "Save";
        saveBTN.Location = new Point(200, 50 + i * 280);
        saveBTN.Size = new Size(100, 50);
        this.Controls.Add(saveBTN);
        saveBTN.MouseEnter += new System.EventHandler(this.SaveBTN_click);
    }

    private void SaveBTN_click(object sender, EventArgs e)
    {
        // need to retrieve value from user control
    }
}

Ответы [ 2 ]

0 голосов
/ 02 декабря 2019

Если вы переключитесь на MVVM, вам нужно будет создать модель Event, и каждое поле будет параметром этого класса, позже вы создадите ObservableCollection, который будет заполняться объектами типа Event каждый раз, когда высоздать объект, нажав кнопку save.

0 голосов
/ 02 декабря 2019

Опция 1

создать List<EventComponent> EventComponentList

при добавлении к this.Controls добавить в список

this.Controls.Add(eventComponents[i]);
EventComponentList.Add(eventComponents[i]);

Опция 2 (рекомендуется меньше)

private void SaveBTN_click(object sender, EventArgs e)
{
    var list = this.Controls.OfType<EventComponent>().ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...