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

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?

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;

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:

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

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

0

w formie 1 daj przy tworzeniu formy 2:

Form2 druga_forma = new Form2(this);

w formie 2 daj:

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.

0

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

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

0

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

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

wywal.

        public Form2()
        {
            InitializeComponent();
        }

wywal.

0
Azarien napisał(a):
  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

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