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 :(
To sobie ten dostęp daj? W konstruktorze na przykład?
chętnie.. a jak?
forma2, jej konstruktor wywołany w formie1... i co? :/
Przecież chcesz zamknąć/schować formę2 z poziomu formy3, więc po co jakaś forma1 teraz do szczęścia potrzebna?
Bo musisz zapisać sobie referencję tej przekazanej formy np. w konstruktorze i wtedy masz dostęp kiedy chcesz do wskazanej formy.
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 :/
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? :(
mógłby mi ktoś udzielić konkretnej odpowiedzi?
referencje do formy2 w konstruktorze formy3? jako argument czy jak ?
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.
Swoją drogą to informację o wygranej możesz wyświetlić w MessageBox i możliwe, że nie potrzebujesz tej 3 formy.
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.
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();
}
}
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.
gra skończona! miszcz :))
Jaka jest różnica, gdybym zrobił tak:
public Form3(ref Form2 frm2)
zamiast tak:
public Form3(Form2 frm2)
?
Raczej nie, w tym przypadku to tylko dodatkowa informacja, że przekazujesz przez referencję.
Różnica chyba jest:
http://msdn.microsoft.com/en-us/library/14akc2c7.aspx
http://msdn.microsoft.com/en-us/library/s6938f28.aspx
Tylko sensu nie ma.
A... No tak, przecież to to samo.
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
No tak, ale w tym wypadku to bez znaczenia.
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 [...]