Avatar billede mouse-the-mighty Nybegynder
16. juni 2003 - 11:02 Der 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;

        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Avatar billede bertelbrander Novice
16. juni 2003 - 13:41 #1
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.
Avatar billede mouse-the-mighty Nybegynder
16. juni 2003 - 13:55 #2
hvordan for man Edit1 til at blive en member af MyOwnClass??
Avatar billede bertelbrander Novice
16. juni 2003 - 14:47 #3
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).
Avatar billede segmose Nybegynder
16. juni 2003 - 15:00 #4
Har instancen af TForm1 ikke en get og set metode til text så du ikke behøver at rode sådan inde mit i classer?
Avatar billede soepro Nybegynder
05. august 2003 - 11:10 #5
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.

Herefter kan du referere din TEdit direkte:

#include "form1.h"

class MyOwnClass
{
  protected:
  AnsiString myText;

  public:
  __fastcall MyOwnClass(AnsiString s) { myText = s; };
  __fastcall MyOwnClass(void) { MyOwnClass(""); };

  void __fastcall SetEditText(void);
};

void __fastcall MyOwnClass::SetEditText()
{
  Form1->Edit1->Text = myText;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester