The second approach sounds like a general purpose modal editor pattern I use quite a bit. Typically I pass the object to edit into (a new overload of) ShowDialog and then modify it if the dialog was closed successfully, i.e.
public DialogResult ShowDialog(IWin32Window owner, Customer c){
this.name.Text = c.Name;
this.address.Text = c.Address;
DialogResult r = ShowDialog(owner);
if(DialogResult.OK == r){
c.Name = this.name.Text;
c.Address = this.address.Text;
}
return r;
}
Note that this pattern is only appropriate for an editor that doesn't save any changes until you close it (or with some modifications, with a Save button or similar). Don't use it if you want live updates, like a property editor panel – use data binding for that.