Using a dependency injection (and a design pattern of the same name) is a good well-known method.
I prefer a different method which I find a bit simpler. You can create an interface visible in both forms and implement it by the form which methods you want to call. Good thing about it that you can take benefit of partial form declaration. You can created yes another file and in inheritance list add you interface (but not
Form
— it is declared in other partial declaration inheritance list). You also don't need to add your interface to other files of partial declaration.
Pass just the interface reference to the form to be calling your methods, not reference to the form. In this way, you isolate interface from its implementation. You don't need to make your methods public and pass to much access to one form from another.
void MyInterface.MyMethod() { }
public void MyMethod() { }
First method of interface implementation is the best in most cases, not just for interfacing between forms.
—SA