たとえば、次のように定義された独自のデータ クラスがあるとします。
public class MyData
{
    public string v1;
    public int v2;
    //etc.
}
これを独自の Form 派生クラスに渡し、それを使用してフォーム コントロールを初期化できます。
public partial class MyForm : Form
{
    private MyData dataIn;
    public MyForm(MyData data)
    {
        InitializeComponent();
        dataIn = data;
    }
}
private void MyForm_Load(object sender, EventArgs e)
{
    //Init controls in 'MyForm' from 'dataIn'
}
private void buttonSave_Click(object sender, EventArgs e)
{
    //Save button was clicked
    //Read data from 'MyForm', but
    //how to return it back in 'MyData' class?
    //Close form
    this.DialogResult = System.Windows.Forms.DialogResult.OK;
    this.Close();
}
そして、フォーム自体は次のように呼び出されます。
//Initial data for the form
MyData data = new MyData(){
    v1 = "test",
    v2 = 123
};
MyForm dlg = new MyForm(data);
if (dlg.ShowDialog() == DialogResult.OK)
{
    //User clicked Save -- how to get data back in 'MyData'?
}
問題はMyData、データを入力してから返す方法MyFormです。