Можно ли реализовать MVC в WinForms и как в ней переносить данные с одной формы на другую?

Да, можно реализовать паттерн MVC (Model-View-Controller) в приложении на WinForms. Однако, стоит отметить, что WinForms не предоставляет встроенных средств для полной поддержки этого паттерна, как в ASP.NET MVC или других современных фреймворках. Вместо этого, вам потребуется некоторая дополнительная работа для реализации концепций MVC в архитектуре вашего приложения.

В паттерне MVC, модель (Model) представляет собой компонент, который отвечает за хранение и обработку данных. На WinForms модель может быть представлена классами, содержащими логику вашего приложения и данные, с которыми работает пользователь. Например, если ваше приложение работает с базой данных, вы можете создать класс, который будет управлять запросами и обработкой данных из этой базы.

Представление (View) в MVC отвечает за отображение данных пользователю и получение от него ввода. В WinForms представление обычно представляется в виде формы или контролов на форме, которые показывают данные и реагируют на действия пользователя, такие как нажатие кнопок или ввод текста. Ваша форма или контрол должны иметь доступ к модели для получения данных и передачи информации о действиях пользователя.

Контроллер (Controller) в MVC отвечает за связь между моделью и представлением. В WinForms, контроллер может быть представлен в виде класса, который обрабатывает события представления и обновляет модель. Например, если у вас есть форма с кнопкой "Сохранить", контроллер может быть ответственным за обработку нажатия этой кнопки, получение данных из представления и сохранение их в модели.

Переход данных с одной формы на другую может быть реализован разными способами в зависимости от конкретных требований и архитектуры вашего приложения. Один из возможных подходов - это передача данных через свойства или методы формы. Вы можете создать публичные свойства или методы на форме, которые будут использоваться другой формой для передачи данных. Например, если у вас есть форма для создания нового пользователя, вы можете иметь публичные свойства для каждого из полей пользователя, чтобы другая форма могла получить эти данные.

Вот пример кода, который демонстрирует такой подход:

public class UserForm : Form
{
    public string UserName { get; set; }
    public int Age { get; set; }

    private void btnSave_Click(object sender, EventArgs e)
    {
        // сохраняем данные в свойства формы
        UserName = txtUserName.Text;
        Age = int.Parse(txtAge.Text);
        
        // закрываем форму, данные будут доступны через свойства
        Close();
    }
}

public class MainForm : Form
{
    private void btnCreateUser_Click(object sender, EventArgs e)
    {
        // создаем экземпляр формы пользователя
        var userForm = new UserForm();
        
        // отображаем форму
        userForm.ShowDialog();

        // получаем данные из свойств формы пользователя
        var userName = userForm.UserName;
        var age = userForm.Age;

        // делаем что-то с полученными данными
        // ...
    }
}

Это лишь один из возможных подходов, и вы можете выбрать более сложные или производительные реализации в зависимости от требований вашего приложения.