Avatar billede mortenhc Nybegynder
09. januar 2005 - 17:09 Der er 5 kommentarer og
1 løsning

Variabler i Borland Builder 5.0

Hej
Jeg forsøger at bruge variablen MedarbejderID i flere forme. For at gøre dette erklærer jeg variablen globalt i min velkomst-menu, Sådan (i public):

start.h
-------
//---------------------------------------------------------------------------

#ifndef startH
#define startH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
#include <Menus.hpp>
#include <Buttons.hpp>
#include "Modelkomp.h"
//---------------------------------------------------------------------------
class TVelkomst : public TForm
{
__published:    // IDE-managed Components
        TImage *Logo;
        TLabel *Label1;
        TMainMenu *MainMenu;
        TMenuItem *afslut;
        TMenuItem *Kunde1;
        TMenuItem *OpretKunde1;
        TMenuItem *Sletkunde1;
        TMenuItem *FindKunde1;
        TMenuItem *Medarbejder1;
        TMenuItem *logaf;
        TMenuItem *Hjlp1;
        TMenuItem *Om1;
        TMenuItem *OpretMedarbejder1;
        TMenuItem *SletMedarbejder1;
        TMenuItem *N1;
        TMenuItem *Om2;
        TMenuItem *SletMedarbejder2;
        TComboBox *nummer;
        TEdit *Adgangskode;
        TBevel *Bevel1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *Label4;
        TBitBtn *BitBtn1;
        TLabel *Navn;
        TLabel *Label5;
        TMenuItem *N2;
        TMenuItem *Afslut1;
        TMenuItem *N3;
        TMenuItem *Opretkartotekskor1;
        void __fastcall OpretMedarbejder1Click(TObject *Sender);
        void __fastcall FormActivate(TObject *Sender);
        void __fastcall FormDestroy(TObject *Sender);
        void __fastcall nummerChange(TObject *Sender);
        void __fastcall BitBtn1Click(TObject *Sender);
        void __fastcall logafClick(TObject *Sender);
        void __fastcall OpretKunde1Click(TObject *Sender);
private:    // User declarations
        MMedarbejder* Pmedarbejder;
public:        // User declarations
        string MedarbejderID;
        __fastcall TVelkomst(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TVelkomst *Velkomst;
//---------------------------------------------------------------------------
#endif


Ved at inkludere min velkomstmenu (start.h) i Opretmedarbejder-formen, burde jeg kunne hente MedarbejderID.

start.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop


#include "start.h"
#include "Modelkomp.h"
#include "KundeOpret.h"
#include "DataModul.h"

void __fastcall TOpretKunde::FormCreate(TObject *Sender)
{
  Edit1->Text=Velkomst->MedarbejderID.c_str();
}
//---------------------------------------------------------------------------
.
..
.
..
..
.
..
.
Kompileren brokker sig overhovedet ikke. Men der kommer intet ud på edit-feltet!
Ved at debugge, kan jeg se at variablen "forsvinder" når jeg skifter til den nye form, men den burde da kunne hentes med Velkomst->MedarbejderID.c_str()?????
Hvad gør jeg galt? Fatter det ikke.
Avatar billede gammelhat Nybegynder
09. januar 2005 - 17:27 #1
Du forventer at Edit1 sættes når du kalder .Show() ?

HVis du kigger i projektfilen for dit projekt, kan du se at alle forme oprettes under opstart. Dvs formen's constructor kaldes ikke ved .Show()
Avatar billede gammelhat Nybegynder
09. januar 2005 - 17:33 #2
Jeg tror det står krystalklart for dig, hvis du prøver at smide en messagebox ind

void __fastcall TOpretKunde::FormCreate(TObject *Sender)
{
  Edit1->Text=Velkomst->MedarbejderID.c_str();
  MessageBox(NULL, "Jeg bliver kaldt allerede her", "", MB_OK);
}
Avatar billede mortenhc Nybegynder
09. januar 2005 - 17:56 #3
Jeps, du har løst problemet. Problemet var at jeg gav variablen værdi under "onformcreate". Ved at give variblen værdi, når brugeren trykker på en knap, kan variablen kaldes fra alle andre forme :-)
Velkomst-formen:

void __fastcall TVelkomst::BitBtn1Click(TObject *Sender)
{
      Label6->Caption = MedarbejderID.c_str();

}


kaldet fra opretkundeformen (eller en anden form):
void __fastcall TOpretKunde::FormActivate(TObject *Sender)
{
  Pmedarbejder = new MMedarbejder;
  Label11->Caption=Velkomst->Label6->Caption;

}

Det virker :-)
Avatar billede mortenhc Nybegynder
09. januar 2005 - 17:56 #4
Giv mig et svar, så vil du få point.
Avatar billede mortenhc Nybegynder
09. januar 2005 - 18:06 #5
Altså formACTIVATE og ikke formCREATE, som jeg gjorde før
Avatar billede mortenhc Nybegynder
14. januar 2005 - 13:39 #6
ok, når du ikke vil have dine point, må jeg jo selv tage dem.
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