Q:

Share a object between Main and Child window as a means of passing data back and forth (C#)

This problem has three files:

Options.cs (A datastore for option values)
MainWindow.cs (The main window for the program, its appearnce is modified based on the options inside the Options datastore - once that class is decalred as a object)
OptionsWindow.cs (The child window where the user sets the option value, this window then saves the changes into the Options datastore when the user presses a button inside the window)  

What I want to do is share data between a main window form and child window form in C#.
my main window is called MainWindow and child window OptionsWindow.
I have a data store called Options. This is a object that stores various user options. (some are type int and bool) these options are used by MainWindow for appearance purposes.
So the user makes changes in the OptionsWindow and these variables changes get saved in the userOptions object of type Options that is declared inside the OptionsWindow.
I did this because I need a easy and simple way to move set data in a childwindow, save that data to a object and then use that data in the MainWindow
Why did I not declare the userOptions object inside the MainWindow? Because you can't access any data declared in MainWindow unless I make the object public which everyone says never ever do. So I have tried making the userOptions object inside the OptionsWindow and exposing the varaibles (data) through properties.
This works. I can access and set properties from both OptionsWindow and MainWindow. 
Whats the problem? Well the optionsWindow.Show(); can only be used once, after that C# will not let it ever work again, so for some reason its once use only. Also it seems the object userOptions is being destroyed once the form closes.
MainWindow.cs
public partial class MainWindow : Form
    {
        OptionsWindow optionsWindow = new OptionsWindow();

optionsWindow then declares an object userOptions of type Options. This is the datastore. The rest of the optionsWindow is getting user data and adding this data to the options datastore
public partial class OptionsWindow : Form
    {
        Options userOptions = new Options();

        public bool AllowToolTip
        {
            get { return userOptions.AllowToolTips; }
            set { userOptions.AllowToolTips = value; }
        }

I call the optionsWindow like this: (note this only works once because of exceptions errors, apparently C# can't reuse child objects. This is really confusing me)
private void optionsToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            try
            {
                optionsWindow.Show();// this stops working after first call
            }
            catch { };

        }

I have been working on this code for about 4 hours trying everything. 
All I want is to have a data store of user options of various types and use a options window to set the options and a main window to read the options. 
That is all I want to do. 
Set variables into a shared datastore inside a child window and access that datastore in the main window.
The data store is a object.
Is this fixable? Or is there a better way to get data from a child-window that can be accessed by both the child-window and the main-window.
EDIT: I ended up making the datastore public because the code was becoming too convoluted.

A:

Try adding Options property to your OptionsWindow form.
public partial class OptionsWindow : Form
{
    public Options { get; set; }

    public bool AllowToolTip
    {
        get { return Options.AllowToolTips; }
        set { Options.AllowToolTips = value; }
    }
}

in your MainWindow you simply set the options and read it when done.
private void optionsToolStripMenuItem1_Click(object sender, EventArgs e)
{
        optionsWindow.Options = myOptions;
        optionsWindow.ShowDialog();
        myOptions = optionsWindow.Options;

}

