The problem is that you need to stop and think what you are doing.
frmPrincipal frm = new frmPrincipal();
frm.Show();
Will always create a new instance of a form and display it - it doesn't, can't, and very definitely shouldn't communicate with an existing instance any more than creating a new integer variable should "join" it to the previous one and affect them both when you set a new value!
And even if it did, you shouldn't be trying to access controls on that form because you shouldn't know they even exist! They are
private
by default for a very good reason - and making them public so you can do things like that is a very bad practice as it "locks" the two forms together, so you can't change one without considering the effects on all the other forms that might depend on it's internals.
What you want to do is "talk back" to the previous instance - which isn't difficult:
Transferring information between two forms, Part 2: Child to Parent[
^] will show you how to do it - and stop hiding forms when you are finished with them! Close them instead.