Jak poprawnie zrealizować komunikację między obiektami w WinForms?

0

W aplikacji WinForms mam 2 klasy Form1 i Form2. Form1 zawiera boola który jest ustawiany na true kiedy otwiera się okno z klasy Form2 i ma być przełączany na false gdy okno Form2 jest zamykane.

Form1 ma metodę:

public void WylaczBoola()
        {
            TrwaDodawanieNotatki = false;
        }

Wykorzystuję ją w klasie Form2:

public partial class Form2 : Form
    {
        private void OnZamykanie(object sndr,EventArgs ea)
        {
            Program.okno.WylaczBoola();
        }

        public Form2()
        {
            InitializeComponent();
            FormClosing += OnZamykanie;
        }
    }

Aby móc modyfikować Form1 z poziomu Form2 ustawiłem ją jako statyczne pole klasy Program. Spowodowało to jednak powstanie błędu - 'System.InvalidOperationException'
Co robię nie tak? : /

static class Program
    {
        public static Form1 okno = new Form1();
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);///// tu blad

            

            
            Application.Run(okno);
        }
    }
4

W Form1 dodaj zdarzenie Form2.OnClosing ;)

2

WylaczBoola

Nie!

OnZamykanie

Nie! Nie!

Aby móc modyfikować Form1 z poziomu Form2 ustawiłem ją jako statyczne pole klasy Program.

Nie! Nie! Nie!

Form2 wcale nie potrzebuje odwoływać się do Form1. Jak napisał wcześniej @.Al możesz podpiąć metodę w Form1 do zdarzenia w Form2:

void OpenForm2()
{
   NoteIsBeingAdded = true;
   var form2 = new Form2();
   form2.FormClosing += OnForm2Closing;
   form2.Show();
}

void OnForm2Closing(object sender, EventArgs e)
{
   NoteIsBeingAdded = false; //TrwaDodawanieNotatki = false;
}

proste & skuteczne

0
.Al napisał(a):

W Form1 dodaj zdarzenie Form2.OnClosing ;)

Dzięki. Jesteś geniuszem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1