Witam, jak zrobić następującą rzecz mam jedno okienko główne które będzie cały czas otwarte. Teraz chciałbym klikając w jakiś przycisk otworzyć nowe okno ale tak aby w oknie2 był dostęp do pewnego obiektu utworzonego w oknie1. Jak to zrobić ?
- Rejestracja:ponad 15 lat
- Ostatnio:5 miesięcy

- Rejestracja:ponad 11 lat
- Ostatnio:ponad 4 lata
- Postów:2442
Najprościej: przekaż go konstruktorem. Klasa jest typem referencyjnym więc będziesz operować na oryginalnym obiekcie.
Wedle prostego przykładu:
class C1
{
public string Name { get; set; } = "C1";
}
class C2
{
public C2(C1 c1)
{
c1.Name = "Changed";
}
}
class Program
{
static void Main(string[] args)
{
var c1 = new C1();
var c2 = new C2(c1);
Console.WriteLine(c1.Name);
}
}
- Rejestracja:ponad 15 lat
- Ostatnio:5 miesięcy
ok, obawiam się że tych okien będzie więcej, gdzieś wyczytałem że można by zastosować singleton. Okna będą się otwierały jedno z drugiego i trzeba by było non stop przekazywać to w konstruktorze.
- Rejestracja:ponad 19 lat
- Ostatnio:30 dni
Bardzo źle kombinujesz. Okno to tylko narzędzie prezentacji. Jeśli z jakiegoś pwoodu okno B ma mieć dostęp do okna A to zakładam że ma się za tym kryć jakaś logika.
Pomyśl o tym bardziej w ten sposób:
Okno A <-------------------> (Logika i Dane) <------------------> Okno B
Zakładam żę konieczność zmiany czegoś w oknie A przez okno B wynika ze zmiany jakiejś wartości, zatem:
- Logika i/lub dane dane to osobna klasa utworzona poza oknem. Tak jak napisałeś wcześniej może być singletonem.
- Okna to osobne klasy okien
- Okno A i okno B pobiera dane z klasy Logiki i potrafi reagować na zmiany w tej klasie. Tak samo zmiany w oknie A i B powinny odzwierciedlać się w klasie logiki
Mała uwaga: Pisząc o konieczności zmainy czegoś w klasie mam na myśli zmianę czegos w obiekcie klasy (tak dla formalności, nie chce mi się poprawia skrótu myślowego :-) )
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.