<p>what's the best/proper way of interacting between several windows in C# app? 
Recently, I've run into a problem where one of program windows has to call method modifying main window. My solution was to create factory-like class, that would arrange all underlying model-data and organize the communication between various windows (through delegates). However, as passing one or two delegates was not a problem, I started thinking what if my other windows would need 10 delegates to interact properly with main window? Are delegates good solution? How to pass them in good way - through constructor, properties? Or maybe the need of using that many delegates is some serious design flaw itself?</p>

If it's only needing to interact with the main window, why not give a reference to the main window in the constructor of the others?
```
```
public class MainForm : Form
{
}

public class OtherForm : Form
{
    protected MainForm MainForm { get; set; }

    public OtherForm(MainForm mainForm) : base()
    {
        this.MainForm = mainForm;
    }
}
```
```
EDIT:
Simple and effective.
If your forms need to interact with all the other forms of the application, then a
service locator
type pattern might be better suited.