16. juni 2003 - 11:02Der er
4 kommentarer og 1 løsning
Declare en selvlavet class som datamember
Jeg bruger Borland C++ 5
i en class (MyQwnClass) har jeg en function som skal skrive til en edit box (Edit1->Text)
det kan jeg ikke, tilsyndeladende fordi MyOwnClass ikke er en datamember af TForm1 som Edit1 er en member af.
jeg fandt at de objekter der har tilladelse til at skrive til Edit1 er declared i unit1.h så jeg prøvede ogsså at declare MyOwnCLass der med uden held.
unit1.h ser sådanne ud #include <Forms.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { class MyOwnClass; __published: // IDE-managed Components TButton *Button1; TEdit *Edit1; TTimer *Timer1; TTimer *Timer2;
Din funktion i MyOwnClass er nød til at have en måde hvorpå den kan se Edit1. Det kan du så gøre ved at give MyOwnClass en pointer til den TForm1 den tilhører, eller ved at give den en pointer til Edit1 (kunne også laves ved at give MyOwnClass en CallBack funktions pointer til en funktion i TForm1). Man kunne også lade Edit1 være en member af MyOwnClass.
Jeg kender ikke så meget til Borland Builder, men måske kan du blot flytte linien:
TEdit *Edit1;
Fra class'en TForm1 i unit1.h til class'en MyOwnClass (i dens headerfil). Hvis ikke det er muligt vil det nok være nemmere at give MyOwnClass en pointer til TForm1 (hvilket typisk sker i konstruktoren for MyOwnClass).
MyOwnClass skal enten kende den Form som dit TEdit kontrol ligger på - eller have en pointer til den overført, f.eks. i fbm. metode-kaldet i MyOwnClass eller i forbindelse med klassens constructor.
I et normalt BCB projekt, skal FOrm1 vel i princippet være kendt af alle modulet i projektet, så du kan løse dit problem, ved simpelthen at inkludere header-filen til Form1 i dit MyOwnClass modul enten vha. #include "form1.h" eller vha. 'Files->Include Header' og så vælge Form1.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.