logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C#] Jak zmodyfikować zmienne Form1 z Form2 w Visual Studio Express 2008?

Seba319 28 Maj 2011 18:22 3751 7
REKLAMA
  • #1 9553517
    Seba319
    Poziom 24  
    Posty: 504
    Pomógł: 79
    Ocena: 53
    Problem wydaje się banalny, jednak nie bardzo mogę sobie z nim poradzić. Chcąc wyszukać coś na ten temat dostaje mnóstwo wyników jak stworzyć nową formę, a mi chodzi o co innego. Mianowicie jak zmodyfikować zmienne zadeklarowane w form1 z form2? Normalnie nie ma do nich dostępu gdyż form1 jest tworzona w następujący sposób.

    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Dodam że programuje w Visual Studio Express 2008.
  • REKLAMA
  • #2 9553881
    loganek2
    Poziom 17  
    Posty: 103
    Pomógł: 29
    Ocena: 4
    O coś takiego chodzi?:

    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #3 9554403
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    Chcesz otworzyć form2 zaraz przy starcie aplikacji? Jeśli tak, to proponuję zrobić to w konstruktorze form1.
    Jeśli chodzi o zmianę, to zrób na form2 zdarzenie (event), a przy tworzeniu tego form2 w form1 dopnij metodę obsługi zdarzenia. W ten sposób będziesz mógł kulturalnie informować form1 o zmianach na form2.
    Zdarzenie może mieć formę
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    i metoda obsługująca by wyglądała tak:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Możesz też zamiast Action<Parameters> użyć EventHandler<Parameters>, wtedy parameters musi dziedziczyć po EventArgs i metoda będzie miała typowe parametry "sender, args".

    Możesz też użyć delegatów - eventy, zgrubsza pisząc, opakowują delegaty http://www.akadia.com/services/dotnet_delegates_and_events.html.

    loganek2 -> Przemyśl to, co dzieje się w Twoim kodzie, przetestuj, kiedy ta zmienna się przypisze...
  • #4 9558874
    Seba319
    Poziom 24  
    Posty: 504
    Pomógł: 79
    Ocena: 53
    loganek2 -> Chyba nie zrozumiałeś problemu...

    Nie chce jej otwierać zaraz po starcie aplikacji tylko po kliknięciu odpowiedniego przycisku, ale to jest mało istotne.

    wiesniak napisał:
    Jeśli chodzi o zmianę, to zrób na form2 zdarzenie (event), a przy tworzeniu tego form2 w form1 dopnij metodę obsługi zdarzenia. W ten sposób będziesz mógł kulturalnie informować form1 o zmianach na form2.

    Właśnie o takie rozwiązanie mi chodzi, jednak wcześniej nie programowałem w C#, a w dodatku mam małe doświadczenie w pisaniu aplikacji okienkowych. Jeśli dobrze rozumiem tworze sobie nowe zdarzenie i podpinam w form1 metodę do jego obsługi. Po kliknięciu przycisku "Ustawienia" pokazuje okienko z konfiguracją i po zatwierdzeniu konfiguracji wywołuje zdarzenie które obsługuje odpowiednia metoda. Problem w tym, że nadal nie wiem jak to posklejać do kupy? Próbowałem według tego artykułu, ale jakoś nie mogę sobie z tym poradzić. Zdarzenie powinienem stworzyć w Form2, a potem podpiąć je w Form1 do metody? Jeśli tak, to w jaki sposób?
  • REKLAMA
  • Pomocny post
    #5 9558891
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    Zanim pojedziemy dalej, pytanie: czy okno konfiguracji jest modalne (blokujące okno rodzica do czasu zamknięcia modalnego)? Jeśli tak, to czy chcesz zwracać konfigurację przy zamknięciu?
  • #6 9558906
    Seba319
    Poziom 24  
    Posty: 504
    Pomógł: 79
    Ocena: 53
    wiesniak napisał:
    Zanim pojedziemy dalej, pytanie: czy okno konfiguracji jest modalne (blokujące okno rodzica do czasu zamknięcia modalnego)? Jeśli tak, to czy chcesz zwracać konfigurację przy zamknięciu?

    Właśnie w ten sposób chce to zrobić, jest to konfiguracja komunikacji przez RS-232 więc komunikacja nie może się rozpocząć przed zakończeniem konfiguracji. Jak najlepiej blokować okno rodzicielskie?

    PS Widzę że muszę sobie kupić jakąś dobrą książkę na temat tworzenia aplikacji w C#, bo jestem trochę zielony w tym temacie. Może ktoś coś poleci?
  • Pomocny post
    #7 9558929
    wiesniak
    Poziom 31  
    Posty: 1006
    Pomógł: 231
    Ocena: 52
    Łeee, to olej całe te zdarzenia itd :-) Szkoda, że Ci zamieszałem na początku - myślałem, że to ma być okienko obok, które będzie na bieżąco sterować wartościami okna głównego.

    Okno konfiguracyjne otwierasz metodą ShowDialog. Zwraca ona DialogResult, więc możesz odebrać informację, czy user kliknął OK czy Anuluj (przykładowo). Stwórz właściwość (Property) w oknie konfiguracyjnym, która będzie zwracać dane konfiguracyjne (albo zbiór właściwości). Po zamknięciu okna konfiguracji po prostu odczytaj to pole / pola z obiektu okna konfiguracyjnego i użyj tak, jak będziesz chciał.

    A jeśli chodzi o eventy, to rzuć okiem na http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx oraz http://www.akadia.com/services/dotnet_delegates_and_events.html.

    Olej książki, używaj google - tam jest masa odpowiedzi na różne problemy :-) Całkiem niezły, szybki kurs znajdziesz na www.centrumxp.pl
  • REKLAMA
  • #8 9559020
    Seba319
    Poziom 24  
    Posty: 504
    Pomógł: 79
    Ocena: 53
    Wszystko działa jak trzeba, dla potomnych zamieszczam przykładowy kod mojego rozwiązania.

    Wiec zacznę od obsługi zdarzenia kliknięcia przycisku otwierającego menu konfiguracyjne

    Kod: C#
    Zaloguj się, aby zobaczyć kod


    A teraz kod klasy Form2 włącznie z obsługa kliknięcia przycisku OK. Dodałem w tej formie dwie kontrolki NumericUpDown służące do przykładowego nastawiania wartości, który po kliknięciu przycisku OK przepisuje do zmiennych publicznych. Całość wygląda następująco

    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Dzięki za pomoc :)

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik pyta, jak zmodyfikować zmienne w Form1 z Form2 w aplikacji C# w Visual Studio Express 2008. Odpowiedzi sugerują różne podejścia, w tym użycie zdarzeń do komunikacji między formularzami oraz otwieranie Form2 jako okna modalnego za pomocą metody ShowDialog. Użytkownik potwierdza, że chce otworzyć Form2 po kliknięciu przycisku, a nie przy starcie aplikacji. Ostatecznie, po kilku wskazówkach, użytkownik dzieli się działającym kodem, który pokazuje, jak przekazywać wartości z Form2 do Form1 po zatwierdzeniu konfiguracji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA