[C++/CLI] Jak z poziomu jednej klasy dostać się do elementów drugiej

0

Witam,

Pierwszy raz pisze cos w managed C++ i mam zapewne dla was banalny problem. Zreszta w programowaniu obiektowym rowniez jestem poczatkujacym. Napisalem klase do obslugi bluetooth btServer. Obiekt tej klasy jest tworzony w klasie obslugujacej formularz Form1. Klasa Form1 posiada ListBox'a, ktory w zamierzeniu ma pokazywać status połączenia. W jaki sposob z klasy btServer moge dostac sie do tego ListBox'a lub wywolac jakas metode z klasy Form1? Aby moc wyswietlic jakis komunikat.

Klasa btServer udostepnia 2 metody

ref class btServer
{
public:
    btServer(void);
    void start();
    void stop();
private:
};

Natomiast klasa Form1, to standardowa forma, jaka tworzy VisualStudio.
Przy tworzeniu formy, jest tworzony obiekt klasy btServer

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
             bt = gcnew btServer();
0

Przekaż obiektowi klasy btServer referencję na formę.

bt = gcnew btServer(this);

gdzie this jest formą 1. oczywiście musisz odpowiednio zdefiniować konstruktor:

ref class btServer
{
public:
    btServer(Form1^ aforma) {
        forma = aforma;
    }
    void start();
    void stop();
private:
    Form1^ forma;
};

czy jakoś tak — piszę na sucho. teraz btServer ma pole forma, z którego może korzystać.

0

Wielkie dzieki, nigdy bym chyba na to nie wpadl:)

Mimo wszystko mam teraz jeszcze jeden problem, gdy probuje zaincludowac plik "Form1.h" aby nazwa byla dla kompilatora rozpoznawalna dostaje blad:

fatal error C1014: too many include files : depth = 1024
1>  btServer.cpp

Rozumiem skad sie ten blad bierze, ale mimo wszystko nie wiem jak to naprawic.
W Form1.h mam zaincludowany plik btServer.h W btServer.h mam zaincludowany Form1.h
No i to oczywiscie powoduje ten blad, ale jesli usune ktorys z includow, kompilator nie bedzie rozpoznawal jednej z klas.

0

w pliku btserver.h dodaj na początku i na końcu:

#ifndef __BTSERVER_H__
#define __BTSERVER_H__

/* tu cała dotychczasowa treść pliku */

#endif

w pliku form1.h zrób podobnie, jeśli nie ma (z inną nazwą makra oczywiście)

0

Probowalem postepowac wedlug Twoich wskazowek, ale bledy nadal sie pokazuja, tak jakby obydwie klasy byly dla siebie nawzajem niewidoczne.

Czy moglbys ktos rzucic okiem na kod?

http://pastebin.com/nK8Myn33 - btServer.h
http://pastebin.com/iWCfGL2F - Form1.h

Z gory dzieki.

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