Witam
Przeszukałem już tyle tematów i nic nie wyczytyałem co mogłoby mi pomóc.
Wiem, że można przekazać zmienna z formy1 do formy2 przez extern ale wtedy zmienna musi być globalna(choć nie jestem tego pewien) czego chce uniknąć. Więc proszę o prosty przykład jak można używać zmiennej pomiędzy formami.
Poprzez konstruktor?
Najprościej byłoby, aby forma1 miała jako swoje pole referencję do formy2.
Dzięki, ale moglibyście podać przykład w postaci kodu kiedy mamy dwie formy, żeby przekazywac zmienne z form do form2 i form2 do form
Masz jedną formę Form1
i drugą Form2
. Obydwie mają konstruktor, zapewne ta pierwsza to twoja główna więc jej konstruktor wywołuje się tuż po odpaleniu głównego wątku,. Konstruktor tej drugiej wywołuje się z twoją inicjatywą, gdzieś w programie.
Form2^ form = gcnew Form2(...);
... to parametry twojej formy, przekazujesz tam co chcesz, pamiętając żeby w deklaracji konstruktora było to co masz zamiar przekazać.
Przepraszam za ew. błędy w składni, na co dzień nie mam styczności z C++/CLI.
Kurcze nie łapie trochę.
Mam Form1 do której dołączyłem include form2 i teraz w form1 pod buttonem mam
int liczba = 12;
okno_pomocnicze^ nowe_okno = gcnew okno_pomocnicze();
nowe_okno->ShowDialog();
i chce odczytać wartość tej zmiennej w formie2 np wyświetlając ja w textboxie.
Zobacz deklarację i definicję konstruktora Form2, tam do paramów dodaj int'a i wstaw go w konstruktor. Chyba, że w C++/CLI się tak nie da? Chyba niemożliwe.
ShowDialog(IWin32Window^ owner) - czyli to okno które otiwera bedzie ownerem
I Form^ owner dla okna otwieranego
nie wiem dokladnie jak to w C++ by wygladalo ale w C# jest to tak
Form2 noweOkno = new Form2();
noweOkno.ShowDialog(this);
w nowym oknie dodaje Form1 owner;
no a w noweOkno_Load
owner = this.Owner;
Sorry jeśli namieszałem i tak nie jest w c++.
Konstruktor form2 wyglada tak:
public:
okno_pomocnicze(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
}
chodzi CI o to żeby zrobić coś takiego:?
public:
okno_pomocnicze(void)
{
InitializeComponent();
<liczba>;
//
//TODO: Add the constructor code here
//
}
gdzie zmienna liczba zadeklarowana jest w form1 pod buttonem
private: System::Void button1_Click(System::Object<sup> sender, System::EventArgs</sup> e) {
int liczba = 12;
okno_pomocnicze^ nowe_okno = gcnew okno_pomocnicze();
nowe_okno->ShowDialog();
}
// w Form2:
private:
int liczba; // zmienna składowa klasy Form2
(...)
public:
okno_pomocnicze(int parametr)
{
InitializeComponent();
this->liczba = parametr;
}
(...)
// ----------------------------------------
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
int liczba = 12;
okno_pomocnicze^ nowe_okno = gcnew okno_pomocnicze(liczba);
nowe_okno->ShowDialog();
}
Teraz w klasie Form2 masz zadeklarowane pole, które ma wartość taką jaką mu przekażesz w konstruktorze.
Poczytaj o konstruktorach, bo widać, że jesteś nie obeznany w temacie.
Dzięki za pomoc. Udało mi się poprzez konstruktor ale w C# :) Teraz mogę korzystać ze zmiennych w obie strony.