Windows Forms- odwoływanie się do funkcji z innego okna

Windows Forms- odwoływanie się do funkcji z innego okna
AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Jak wywołać funkcję z innego okna(klasy)? A konkretnie mam timer w oknie Form1, chciałbym aby po kliknięciu na przycisk w oknie Form2 był on uruchamiany.

Drugie pytanie, jak dla jednego zdarzenie (np. kliknięcia w przycisk) przypisać dwie akcje?

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2518
0
  1. Potrzebujesz w klasie form2 obiekt na którym możesz wywołać metodę, czyli w dowolny sposób przekazać temu oknu referencję na form1, a później za pomocą operatora dostępu (kropki) wywołać tą metodę

kontrolka.zdarzenie += drugaMetoda;

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0
krwq napisał(a):
  1. Potrzebujesz w klasie form2 obiekt na którym możesz wywołać metodę, czyli w dowolny sposób przekazać temu oknu referencję na form1, a później za pomocą operatora dostępu (kropki) wywołać tą metodę

Ok, w klasie Form2 daje:

Kopiuj
Form1 klasa = new Form1();

Problem w tym, że tworzone jest wtedy kolejne okno, ponieważ konstruktor w Form1 zawiera InitializeComponent()
Jeżeli stworze sobie dodatkowy pusty konstruktor i stworze obiekt tak

Kopiuj
Form1 klasa = new Form1(1); // korzysta z przeciążonego konstruktora

wtedy pojawiają się błędy nullreferenceexception

krwq napisał(a):

kontrolka.zdarzenie += drugaMetoda;

Wpadłem na to :), natomiast wystarczy zmiana w oknie (dodanie nowego elementu, przesunięcie, cokolwiek) i kod jest usuwany

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

w formie 1 daj przy tworzeniu formy 2:

Kopiuj
Form2 druga_forma = new Form2(this);

w formie 2 daj:

Kopiuj
private Form1 form1;

public Form2(Form1 form1) // konstruktor
{
  this.form1 = form1;
  InitializeComponent(); // czy co tam domyślnie jest
}

i teraz w formie 2 masz pole form1 które jest twoją formą pierwszą.

żeby się nie pomylić, zrób taki konstruktor zamiast, a nie oprócz, konstruktora domyślnego.

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

http://wklej.org/hash/fc7b634914b/

Błąd nullreferenceexception wyświetla się przy wywołaniu funkcji z Form1 w oknie Form2.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

żeby się nie pomylić, zrób taki konstruktor zamiast, a nie oprócz, konstruktora domyślnego

Kopiuj
  Form2 t = new Form2(); //uruchamia drugie okno

wywal.

Kopiuj
        public Form2()
        {
            InitializeComponent();
        }

wywal.

AD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0
Azarien napisał(a):
Kopiuj
  Form2 t = new Form2(); //uruchamia drugie okno

wywal.

Tylko jak uruchomić nowe okno? Wpisanie druga_forma.Show(); wyrzuca błąd The name 'druga_forma' does not exist in the current context

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.