Cześć ,
Po pierwsze kod który przedstawiłeś zawiera poważne błędy:
Open open = new Open(this);
tworzysz nową instancję formy Open i przekazujesz jej w konstruktor bieżącą formę; z tego co przeglądnąłem w dokumentacji konstruktor klasy Form nie jest przeciążony aby przyjmować obiekty typu Form. Nasuwa mi się pytanie, czy masz wogóle dostęp
do IDE np. Visual Studio i jeśli tak czy nie wskazuje Ci na błędy w tym kodzie?
public path;
brakuje typu, pewnie chodziło Ci o public string path;
path.path = openFileDialog.FileName;
chyba chodziło o "this.path", ale w tym kontekście nie musisz używać "this", wystarczy samo path.
Nauczyciel Ci doradził i masz nowy kod - w porządku - ale co z wcześniejszym problemem, wiadomo dlaczego nie można było przekazać stringa w konstruktor notepada? Problem był nietrywialny stąd moja ciekawość.
Ogólnie rzecz biorąc, jeśli w głownej formie tj. Notepad chcesz otworzyć plik i umieścić go w TextBox'ie to nie potrzebujesz do tego dodatkowej formy pokroju 'Open' - takie zadanie spełnia już gotowy OpenDialog, który zwraca Ci ścieżkę do pliku, który chcesz otworzyć. Tę ścieżkę należy przekazać np. do StreamReadera (https://docs.microsoft.com/pl-pl/dotnet/api/system.io.streamreader?view=netframework-4.8) i za jego pomocą zapisać treść pliku do TextBox'a. Rozumiem, że utworzenie dodatkowej formy "Open" wynika ze specyfiki zadania, jednak w pracy codziennej jest to zbędne.
w Twoim przypadku można dodać do formy Notepad publiczną funkcje która uzupełnia TextBox podanym tekstem i wywołać ją z poziomu formy "Open", wymaga to jednak aby forma "Open" posiadałą referencję do "Notepad" - możesz ją przekazać w konstruktorze - przeciąż go: zamiast
public Open(string path)
możesz zrobić
public Open(Form parent)
i potem np. jak zczytasz tekst ze StreamReadera do powiedzmy zmiennej fileContent to:
parent.FillTextBox(fileContent); <--- coś w tym stylu
Druga opcja to można wykorzystać delegaty, ale to droga na około.
Pozdrawiam.