Odwoływanie się między formami to metod - Błąd

0

Witam,
Mam problem z odwołaniem się z jedenej formy do formy2, a raczej metody formy2.
Sprawa wygląda tak, że piszę komunikator, i docelowo każda rozmowa ma być w nowym okienku. Mam zrobione już że wyświetlanie jest w nowym okienku(Form2) i kiedy wiadomość wysyłana była w Form1 wszystko ładnie działało, ale należało przenieść i wysyłanie do Form2, bo nikt w jednym oknie nie będzie pisał a w drugim czytał....
Pomysły, a raczej rozwiązania jakie widziałem były dwa: odwołanie się z Form2(okienka rozmowy) do metody wysyłania z form1 i przekazaniu w parametrze string wiadomość, albo przenieść całą metodę do form2 i odwołać się tylko do strumienia. Jednak obie metody u mnie zakończyły się tym samym błędem i niepowodzeniem.
Pojawia mi się wyjątek: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu
Próbowałem i z invoke tutaj ale jakoś nie pomogło,
A teraz czas na kod(przedstawiam odwołanie się z form2 do metody form1 z wykorzystaniem invoke, ale z niego nie korzysta, może tu błąd mój?):
Form2

 
       private delegate void SendMessageBack(string wiadomos);
        private void SendMessage(string wiadomos)
        {
            if (this.richTextBox_Wysylanie.InvokeRequired)
            {
                MessageBox.Show(" invoke");
                SendMessageBack f = new SendMessageBack(SendMessage);
                this.Invoke(f, new object[] { wiadomos });
            }
            else
            {
                MessageBox.Show("nie invoke");
                Form1 formaa = new Form1();
                formaa.wysylanie(wiadomos);                
            }
        }
      
        private void buttonWyslij_Click(object sender, EventArgs e)
        {
            string tekst;
            tekst = richTextBox_Wysylanie.Text;        
            SendMessage(tekst);                    
        }

Form1

 
public void wysylanie(string wiadyw)
        {           
            int gh=9;
            string tek;
            string tekstwysylany;
            string tekstwysylany_2;
            tek = Convert.ToString(gh);
            tekstwysylany = tek + "#" + log + "#";
            tekstwysylany += wiadyw;
            tekstwysylany_2 = richTextBox_Wysylanie.Text;
            w.Write(tekstwysylany);  // na tej lini wyrzuca wyjątek
        }

w.write jest zadeklarowane w klasie Form1
public BinaryWriter w = null;
i przy nawiązaniu połączenia z serwerem

                NetworkStream stream = klient.GetStream();
                w = new BinaryWriter(stream); 

Proszę o pomoc, co jest nie tak z tym odwołaniem, jak to poprawić i w czym jest problem. Dzięki

0

Najwyraźniej, w momencie wywołania w.Write, to w jest po prostu nullem — pewnie to twoje „nawiązanie połączenia z serwerem” wcale jeszcze nie miało miejsca. Zobacz to:

Form1 formaa = new Form1();
formaa.wysylanie(wiadomos);

Tworzysz NOWĄ formę1. Czy w konstruktorze łączy się ona z serwerem? Jeśli nie, to jest jasne, że jej .w jest w tym momencie null.

0

Masz rację, też już po napisaniu posta pomyślałem że to coś właśnie z tą forma może być...
Moje pytanie zatem, czy da się odwołać do starej formy, bo nowa nie jest mi potrzebna, jeśli tak to jak, jeśli nie to jak rozwiązać ten problem...
W konstruktorze nic nie mam.

0

dodaj do konstruktora formy 2 parametr typu Form1, i przechowuj formę1 jako pole w form2.

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