I tried in Form2 by creating a new instance.
Like this: Form1 newForm= new Form1();
newForm.show();
But that it the new instance, not the one that run on background..
The computer does only what you tell it - and EXACTLY what you tell it to do.
You told it to create a *new* Form1 so that's what it did. It created a *new* instance of a Form1 object, and thus it was not the hidden instance of the earlier Form1. Those two Form1's might look the same, but they are entirely different objects.
Do some searching about how to communicate between classes. Shift your thinking from making new items, to having methods inside each class that perform the functions you need. Maybe something like a method in Form1 that directs the form to hide itself, and one to show itself. Same with Form2. Then work out a way for Form2 to tell Form1 to perform the method you want.
A little less of 'A' directly affecting 'B'. A little more of 'A' telling 'B' in what manner to take care of itself.
If your Form2 class always knows how to take care of itself then you only have to write a method one time for "update", "show", "hide", "load", "resize", whatever. But if you try to make Form1 responsible for Form2, then you have to keep everything very synchronized. Form3 will have to duplicate all the control you put in Form1. If you make a change to Form2, you have to update Form1 and Form3 with identical changes.