You can get in to a real mess when one form controls another, unless there is a definite parent/child relationship.
I would suggest that you have a single controlling object, e.g. a FormController class (this is something that you would create this yourself), and have the presentation of your two forms controlled from there.
As well as tidying up the relationship between your objects, you get a better single responsibility mapping - what I mean by that is it is should not be the responsibility of one form to control another. Instead, when an action is performed on one form it simply raises an event to tell anybody that cares that the action has occurred. If nobody cares then that's the end of that, but in this instance you would have a FormController register its interest in the event, and when raised it would then be the window controller's job to listen to that event and handle it accordingly, i.e. in this case affecting the visibility/existence of another form.
Here's a very crude example of what I mean:
public class FormController
{
private readonly WhatsappForm whatsappForm = new WhatsappForm();
private readonly LoginForm loginForm = new LoginForm();
public FormController()
{
loginForm.SomeActionPerformed += HandleLoginActionPerformed;
}
private void HandleLoginActionPerformed(object sender, EventArgs e)
{
whatsappForm.Show();
}
}
Where SomeActionPerformed is an event raised by the login form, so:
partial class LoginForm
{
...
public event EventHandler SomeActionPerformed;
}