Visual c++ dwie formy

0

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.

0

Poprzez konstruktor?

0

Najprościej byłoby, aby forma1 miała jako swoje pole referencję do formy2.

0

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

0

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.

0

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.

0

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.

0

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++.

0

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();
		 }
0
// 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.

0

Dzięki za pomoc. Udało mi się poprzez konstruktor ale w C# :) Teraz mogę korzystać ze zmiennych w obie strony.

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