title: Unsure of the actual implementation of events/delegates across multiple classes
body: <p>I've read through several pages here on Events and Delegates and understand the idea behind them but am unsure of how to use them across multiple classes.  Until now, I've simply relied on the IDE to set everything up for me and I didn't realize it worked inside a single class alone.</p>
  
  <pre><code>public class MyForm : Form
  {
      public MyForm()
      {
          ...
          this.Controls.Add(menuBuilder.GenerateMenuForMyForm());
          //load other controls into the form to visualize/manipulate data
      }
  
      public void UpdateDataInControls()
      {
          //reloads info into controls based on data in serializable class.
      }
  }
  
  
  public class MenuBuilder
  {
      public MenuStrip GenerateMenuForMyForm()
      {
          MenuStrip menu = new MenuStrip();
  
          ...
  
          ToolStripMenuItem loadfile = new ToolStripMenuItem();
          loadfile.name = "loadfile";
          loadfile.text = "Load File";
          loadfile.Click += new EventHandler(loadfile_Click);
          file.DropDownItems.Add(loadfile);
  
          ...
  
          return menu;
      }
  
      void loadfile_Click(object sender, EventArgs e)
      {
          //Open a file dialog and deserialize file
          //Need to send an event to MyForm letting it know that it needs to 
          //update controls in the form to reflect the deserialized data.
      }
  }
  </code></pre>
  
  <p>So in this instance, I have events working within a single class, but I'm unsure how to set things up so MyForm can receive an event from MenuBuilder.  I have tried something like</p>
  
  <pre><code>loadfile.Click += new EventHandler(myFormObject.loadfile_Click);
  </code></pre>
  
  <p>and make the loadfile_Click() function in MyForm, but that seems counter-intuitive to the idea of driving functionality through events themselves since it needs the form's object itself to be passed into the constructor.  If that's the case, I might as well just call the function directly.</p>