I believe this should help with your second issue. The first thing you need to do is to make sure that the actual control you are trying to change properties of (in your example it would be TextBox1) is declared as public. If you are using VS and used the form designer, then look in the solution explorer under Form1 for a file called Form1.Designer.cs. If you expand all of the code blocks (press the little grey + signs on the left of the actual code) in this file you will find where the controls are declared, usually near the bottom of the file. Change the accesibility modifier on the control from private to public.
After this is done you need an actual instance of the form to modify. This can be achieved by creating a static variable to hold the original form1 instance and then using the variable to modify the instance. Here is the code for the second part:
form1:
//create static variable for holding referance to forms not being currently shown
public static Form1 staticVar = null;
the actual declaration of the static variable can be anywhere outside of a method in the class.
staticVar = this;
this.Hide();
Form2 form2 = new Form2();
form2.Show();
form2:
Form1.staticVar.TextBox1.Text = "it worked";
//close this form and open up original form
this.Close();
Form1.staticVar.Show();
This should work for you. If you have any problems or further questions post them and Ill do my best to help out. As for the first issue you have, perhaps you could explain what you dont like about the other way of calling a form and maybe I can help with a way around it.