Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++/CLI Multiformularz- dostęp do właściwości formy 1 z formy 2

analfabet 04 Sie 2011 19:08 1480 6
  • #1 04 Sie 2011 19:08
    analfabet
    Poziom 12  

    Witam, w form1 mam label1 i button1. Pod zdarzenie przypisane naciśnięciu button1 mam przypisane wywołanie form2.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Do tego momentu jest wszystko ładnie pięknie- mogę wywoływać metody i zmieniać właściwości form2 z poziomu form1 (oczywiście tylko te publiczne). Tylko jest jedno "ale"- chciałbym poprzez naciśnięcie przycisku button2 w form2 zmienić tekst w label1 w form1. Jak to zrobić? Znalazłem trochę informacji o multiformach, ale robię coś źle, bo jakbym nie kombinował nie wiem jak uzyskać dostęp do pól i metod w form1. Moglibyście pomóc z rozwiązaniem tego?

    W form2 mam publiczną właściwość forma, a w konstruktorze form2 coś takiego:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Teoretycznie, z tego co wyczytałem w button2_Click powinienem mieć możliwość zrobienia czegoś takiego:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Tym sposobem z poziomu form2 zmieniłbym tekst w label1 w form1.

    Jednak ciągle wyskakują błędy. IntelliSense w ogóle nie widzi obiektów z form1 w form2. Gdzie tkwi błąd?

    0 6
  • #2 04 Sie 2011 22:19
    wiesniak
    Poziom 31  

    Obiekty na formach są prywatne - dlatego nie możesz się do nich dostać. Zrób sobie jakieś właściwości na form1, przez które będziesz ustawiał np. label, albo stwórz na form1 jakąś metodę i przypisz ją do delegata na form2 w zaraz po stworzeniu form2.

    Poszukaj moich starszych postów - z miesiąc czy dwa temu pisałem w dwóch tematach poruszających identyczny problem.

    0
  • #3 04 Sie 2011 23:04
    loganek2
    Poziom 16  

    możesz też zastosować rozwiązanie, które na ogół nie jest polecane(ale chyba wspierane przez Microsoft, bo dali nawet możliwość edycji tego w oknie Properties), a mianowicie, zmiana labela jako obiekt publiczny

    0
  • #4 05 Sie 2011 06:46
    wiesniak
    Poziom 31  

    loganek2 -> To nie jest kwestia wspierania albo niewspierania przez Microsoft. Kontrolki na formie są polami klasy i jako takie mogą mieć różne modyfikatory dostępu. C# pozwala na zrobienie wielu różnych "niekulturalnych" rzeczy w kodzie, ale nie znaczy to, że trzeba z tego korzystać :) Poza tym jest to łamanie zasad hermetyzacji.

    0
  • #5 05 Sie 2011 17:35
    analfabet
    Poziom 12  

    Label1 ma modyfikator public. Generalnie powinno to działać tak jak opisałem to w pierwszym poście, czy czegoś brakuje (np. w jakiś sprytny sposób zaincludować "form1.h" w form2- taki głupi przykład- tak robiłem, ale zaczęło strasznie sypać błędami, więc pewnie tak to nie działa)?

    0
  • #7 05 Sie 2011 21:10
    analfabet
    Poziom 12  

    Zdaje się, że od napisania pierwszego posta nic nie zmieniałem w kodzie. Po dodaniu tylko linijki

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    w form2 wyskoczyło coś takiego:
    Kod: select_listing
    Zaloguj się, aby zobaczyć kod


    gdzie linijka 127 w form1 to:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Bez tego includa wszystko się kompiluje i działa ok.
    Zresztą takie crossowanie includów chyba jest bez sensu?

    0