Home > OS >  C#-Winforms-How to use instance objects in different subforms?
C#-Winforms-How to use instance objects in different subforms?

Time:10-21

I have a "MainForm" and a "GraphicsForm". Clicking "New" on the main form, a "GraphicsForm" will be created. The problem is that when I create multiple "GraphicsForm", and I want to save the content of one of the "GraphicsForm", I need to clicking "Save" on the "MainForm" and the program will write the content to a file, I don't know how to pass the content of this "GraphicsForm" to "MainForm" for storage.

If I have anything that is not clearly described, I hope you can point it out and I will edit my issue ASAP.

CodePudding user response:

I'm sure this has been answered before but basically, you pass in an instance of the 'data storage' to the new form.

interface ISaveForm
{
    void Save();
}

class MainForm
{
    private DataStorage _dataStorage;
    private ICollection<ISaveForm> _forms = new List<ISaveForm>();

    public void OnNew()
    {
        var subForm = new GraphicsForm(_dataStorage);
        subForm.Show();
        _forms.Add(subForm);
    }
    public void OnSave()
    {
       foreach(var form in _forms)
       {
         form.Save();
       }
    }
}
class GraphicsForm : Form,ISaveForm
{
    private DataStorage _dataStorage;

    public GraphicsForm(DataStorage dataStorage)
    {
        _dataStorage = dataStorage;
    }
    public void Save()
    {
    }
}

CodePudding user response:

Because MainForm is a MDI form, it is easy to use ActiveMdiChild to get the active child form.

class MainForm : Form
{
    public void OnSaveButtonClick(object sender, EventArgs e)
    {
        if(ActiveMdiChild is GraphicsForm g)
            Save(g);
    }
}
  • Related