There are only two ways to display a form in .NET: Show and ShowDialog.
If you have multiple copies appearing then it is not the use of either that is the problem - it is that you are constructing new instances instead of using the same instance each time.
Create a private class level variable to hold your form instance:
private MyForm myForm;
Do not assign it a value.
When you want to show or update the data, check the value:
if (myForm == null)
myForm = new MyForm();
myForm.FormClosing += new FormClosingEventHandler(myForm_FormClosing);
...pass the data to your form properties
And clear the variable when the form is closed:
void myForm_FormClosing(object sender, FormClosingEventArgs e)
...collect your data from the form properties if necessary
myForm = null;