Guzik do zamykania innej formy, Pomocy!

0

Forma1 ma guzik tworzący formę2 oraz guzik zamykający formę2.
Forma2 ma guzik tworzący formę3.
Jak zrobić w formie3 guzik do zamykania formy2 ?? :(
Nie mam dostępu z formy3 do obiektu forma2 utworzonego w formie1 :(

1

To sobie ten dostęp daj? W konstruktorze na przykład?

0

chętnie.. a jak?
forma2, jej konstruktor wywołany w formie1... i co? :/

1

Przecież chcesz zamknąć/schować formę2 z poziomu formy3, więc po co jakaś forma1 teraz do szczęścia potrzebna?

1

Bo musisz zapisać sobie referencję tej przekazanej formy np. w konstruktorze i wtedy masz dostęp kiedy chcesz do wskazanej formy.

0

bo ogólnie to jest w grze i forma1 jest główna - tworzy forme2 czyli plansze. po wygranej forma2 wyrzuca okienko forma2 Wygrana! z guzikiem ok który ma zamykać formy2 i 3.
ktoś wie? jak z trzeciej zamknąć drugą utworzoną w pierwszej? pierwsza tworzy drugą więc ma do niej dostęp i może ją zamknąć ale trzecia nie ma :/

0

public partial class Form3 : Form
{

    public Form3()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        //  zamknij2!!!!!!!;
    
    }
}

to jak zamknąć 2? :(

0

mógłby mi ktoś udzielić konkretnej odpowiedzi?

0

referencje do formy2 w konstruktorze formy3? jako argument czy jak ?

1

Tak jak napisałem... Jeżeli chcesz zamknąć 2. formę (obojętnie gdzie została utworzona) z 3. formy to na 3. musisz mieć referencję 2., czyli przekazać przez konstruktor najpierw z pierwszej, a potem z drugiej na 3.

EDIT:
@up Jest taka opcja "Edytuj post"... No a przez co? Przez argument.

0

Swoją drogą to informację o wygranej możesz wyświetlić w MessageBox i możliwe, że nie potrzebujesz tej 3 formy.

0

dziękuję za niechęć pomocy :/

konstruktory są bezargumentowe. jak ma wyglądać taki który przekazuję referencję do innej formy ? moze ktoś to napisać :/ jakbym rozumiał co do mnie mówicie to bym sobie dawno to napisał.

Jest klasa A która tworzy obiekt klasy B. jak ma wyglądać konstruktor i w której klasie aby mieć dostęp w klasie C do obiektu B.

2

Przedstawię ci kod pokrótce:

class Form1
{
    public Form1()
    {
        new Form2().Show(); // tworzymy drugie okno i je wyświetlamy
    }
}

class Form2
{
    public Form2()
    {
        new Form3(this).Show(); // tworzymy trzecie okno i je wyświetlamy
    }
}

class Form3
{
    Form2 frm2;

    public Form3(Form2 frm2)
    {
        this.frm2 = frm2; // przypisujemy zmiennej argument i teraz masz dostęp do formy drugiej
        // ...
        frm2.Close();
    }
}
0

podzięowania :))
mistrzowsko :D

odpowiedź kodem jest lepsza od odpowiedzi zagadką. research trwa a tą konstrukcję zapamiętam i będę potrafił wykorzystać w przyszłości. pomagajmy sobie i innym, pozdrawiam.

0

gra skończona! miszcz :))

0

Jaka jest różnica, gdybym zrobił tak:

public Form3(ref Form2 frm2)

zamiast tak:

public Form3(Form2 frm2)

?

0

Raczej nie, w tym przypadku to tylko dodatkowa informacja, że przekazujesz przez referencję.

0

A... No tak, przecież to to samo.

2
fghfgh napisał(a):

A... No tak, przecież to to samo.

To nie jest to samo. Jeżeli nie przekażesz przez ref, a wewnątrz metody zrobisz na tej zmiennej new, to po wyjściu z metody okaże się, że nic się nie zmieniło :P
Na przykładzie. Mamy klasę:

class MyInt
{
    public int Value;
    public MyInt(int value) { Value = value; }
}

I jakąś metodę gdzieś:

public void Method(MyInt myObject)
{
   myObject = new MyInt(5);
}

I teraz gdzieś wywołanie:

MyInt myGreatInt = new MyInt(3);
SomeClass.Method(myGreatInt);
Console.Write(myGreatInt.Value);

Na ekranie wyświetli się 3. Gdy dodamy ref w przed MyInt - wyświetli się 5

0

No tak, ale w tym wypadku to bez znaczenia.

0

To nie jest to samo. Jeżeli przekażesz przez ref, a wewnątrz metody zrobisz na tej zmiennej new, to po wyjściu z metody okaże się, że nic się nie zmieniło.

Błąd.
Powinno być:

[...] Jeżeli nie przekażesz przez ref [...]

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