Avatar billede anold Nybegynder
13. september 2004 - 09:07 Der er 8 kommentarer og
1 løsning

kald til anden form

Hej
hvorfor kan jeg ikke kalde "en værdi" fra en anden form i mit project på denne her måde

begin
If Frmopsaetning.CheckBox1.Checked = True then
Begin
Screen.Cursor := crHourGlass;

når jeg prøver dette så får jeg en uforstålig fejl
Avatar billede fixxxer Nybegynder
13. september 2004 - 09:08 #1
Hvad er den uforståelige fejl? :)
Avatar billede anold Nybegynder
13. september 2004 - 09:10 #2
fejlen er en access violation
Avatar billede fixxxer Nybegynder
13. september 2004 - 09:13 #3
så prøver du at få fat i noget der ikke er oprettet. hvornår starter du ovenstående kode?
Avatar billede fixxxer Nybegynder
13. september 2004 - 09:15 #4
for at forklare:

var
  someLabel: TLabel;
begin
  //hvis jeg allerede nu vil tilgå someLabel får jeg en access violation
  someLabel.Caption := 'Niks, det må man ikke';
end;

Løsningen er at sørge for at someLabel er oprettet:

var
  someLabel: TLabel;
begin
  someLabel := TLabel.Create(Self); //someLabel er nu oprette og kan bruges.
  someLabel.Caption := 'Niks, det må man ikke';
end;
 

Jeg mistænker at du ved OnCreate for din hovedform, prøver at tilgå din opsætningsform. Men denne er endnu ikke oprettet og du får en access violation fejl.
Avatar billede anold Nybegynder
13. september 2004 - 09:30 #5
kan jeg så ikke create min opsætningsform ved oncreage f.eks via  Frmopsaetning.Create();
Avatar billede fixxxer Nybegynder
13. september 2004 - 10:24 #6
I så fald skal du først slå den fra under Project > Options, ved at fjerne din opsætningsform fra Auto-create listen.

Du skal så oprette din form på følgende måde:

begin
fmropsaetning := Tfmropsaetning.create(Self);
If Frmopsaetning.CheckBox1.Checked = True then
Begin
Screen.Cursor := crHourGlass;
Avatar billede anold Nybegynder
13. september 2004 - 11:03 #7
NU HAR JEG GJORT SOM DU SKRIVER MEN NU FÅR JEG DENNE FEJL


[Error] hovde.pas(103): Undeclared identifier: 'fmropsaetning'
Avatar billede fixxxer Nybegynder
13. september 2004 - 11:06 #8
Jeg har blot været lidt fumlefingret (men det betyder ikke at du kan kikke min "kopi" af din kode efter)

frmopsaetning := Tfrmopsaetning.create(Self);
Avatar billede hrc Mester
14. september 2004 - 21:15 #9
Hvis alle formene er autokreeret (se skift-ctrl-f11) så er det lige meget hvornår man tilgår dem - de er oprettet. Formens OnCreate bliver ikke kørt før alt er oprettet, men hvis du overstyrer constructoren så kommer den pludselig først.

(Det var dog nogle små indtastningsfelter de har lavet...)

Jeg gætter på at din anden form ikke er autooprettet - hvilket er sådan som man bør gøre det.

Hvis du vil åbne en anden form (modalt) så er det noget lignende dette:

procedure ...
var
  Option1 : boolean;
begin
  frmOpsaetning := TfrmOpsaetning.Create(self);
  try
    if frmOpsatning.ShowModal = mrOK then begin // en knap's modalresult er sat til mrOK
      Option1 := CheckBox1.Checked;
  finally
    frmOpsaetning.Free; // alt. brug .Release
  end;

  // Kunne godt være inde i "frmOpsaetning.showmodal"...
  // men jeg foretrækker at frigive formen med det samme. Det er en smagssag
  if Option1 then begin
    // Gør hvad du nu vil her.
  end;
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