Avatar billede pc-pladder Nybegynder
17. august 2005 - 19:03 Der er 14 kommentarer og
4 løsninger

Stop hvis en If kode bliver udført

Hej!

Jeg sidder af og til og programmere lidt i min fritid... Jeg er ved at lære det, men er langt fra rigtig god til det... Jeg finder dog af og til på nogle gode ideer, og lige nu er jeg i gang med mit hidtil største projekt.

Programmet lægger bla. tal sammen, og det er her problemet ligger... Hvis man ikke skriver noget i feltet, hvor det tal man ellers ville have lagt til, skulle stå, så kommer der en kritisk fejl, og prgrammet går ned... Derfor har jeg skrevet følgende stykke kode før den udfører komandoen der lægger tallet til.

If Edit1.Text = '' Then
Fejl1.Show
Else
"Kør resten af koden"

Mit ptoblem er så, at selv om den finder ud af at der ikke står noget i feltet, så viser den bare den fejl boks jeg selv har lavet, og kører videre... Ideen var jo at den skulle vise min fejl, OG SÅ STOPPE!

Hvordan får jeg den til at stoppe, når den har udført det der står i min "If komando" ?

Og så en anden ting...
Kan man få den til at gøre et eller andet (f.eks vise en boks, og så stoppe) hvis den finder ud af at det er bogstaver det står i feltet?
Avatar billede pc-pladder Nybegynder
17. august 2005 - 19:16 #1
Lige til info....
Jeg bruger Delphi 3...
Avatar billede doc404 Novice
17. august 2005 - 19:48 #2
Har du "resten af koden" mellem en begin .. end; ?
Avatar billede pc-pladder Nybegynder
17. august 2005 - 20:12 #3
Nej... Det prøver jeg lige... Kender ikke delphi så godt endnu... Hehe....
Avatar billede pc-pladder Nybegynder
17. august 2005 - 20:23 #4
Fedt! Det virkede!
Hvad så med bogstaver?
Kan man f.eks skrive

If Edit1.Text = (Bogstaver) Then
(Vis fejl)

Hvad skal jeg så skrive i stedet for (Bogstaver) ?
Avatar billede borrisholt Novice
17. august 2005 - 21:14 #5
1)
  Du har en komando der hedder Exit. De exit'er ud af din prodedure.
2)
  I Delphi 6 og frem er der kommet funktioner til den slags du får lige implemteringen af dem her :

function StrToIntDef(const S: string; Default: Integer): Integer;
var
  E: Integer;
begin
  Val(S, Result, E);
  if E <> 0 then Result := Default;
end;

function TryStrToInt(const S: string; var Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;


Altså kan du i dit program skrive noget alla det her :

var
  a, b : Integer;
begin
  if TryStrToInt(Edit1.Text, a) then
    if TryStrToInt(Edit2.Text, b) then
      Edit3.Text := IntToStr(a+b);
end;

Hvis jeg skal illustere Exit komandoen så kunne man gøre noget alla det her :

var
  a, b : Integer;
begin
  if not TryStrToInt(Edit1.Text, a) then
    exit;
  if not TryStrToInt(Edit2.Text, b) then
    exit;

  Edit3.Text := IntToStr(a+b);
end;

Jens B
Avatar billede hrc Mester
18. august 2005 - 09:28 #6
Du kunne også gøre således:

begin
  if Edit1.Text = '' then
    exit;

  if StrToIntDef(Edit1.Text,MinInt) = MinInt then
    ShowMessageDlg('Skriv et tal',mtError,[mbOK],0)
  else
  begin
    ..
  end;

Alternativt kan du bruge den "kritiske fejl" du snakker om. De kaldes også exceptions. Det er måske ikke ligefrem begynderstof, men jeg viser lige eksemplet. Jeg sidder ikke ved en Delphi lige nu, men fejlmeddelelsen der kommer op siger noget om at en exception á lá EInvalidInput has been raised. Sådan en kan vi fange og håndtere:

begin
  try
    if Edit1.Text = '' then
      raise Exception.Create(Du indtastede intet i feltet. Jeg kunne godt bruge et tal');

    i := StrToInt(Edit1.Text);
    ...
  except
    on E: EInvalidInput do
      ShowMessageDlg('Du indtastede ikke et tal'#13#10 + E:Message,mtError,[mbOK],0);
    on E: Exception do
      ShowMessageDlg(E:Message,mtError,[mbOK],0);
  end;

Eksemplet er interessant fordi den viser hvordan man bruger exceptions. I den første "IF" laver jeg selv en exception hvis feltet er tomt. Det betyder at alt indenfor try-except skippes og programmet går ned til on E: "et eller andet". Her er det en Exception, så det er den sidste "ON" der bruges - Exception er "mother of all exceptions" så den er placeret sidst.

Hvis jeg ikke kan konvertere Edit1.Text til en int, så raiser StrToInt selv en exception (og det er den jeg ikke kan huske hvad hedder). Det fanges i den første "ON".

I øvrigt. Exceptions er sløve - bruge den med omtanke
Avatar billede pc-pladder Nybegynder
20. august 2005 - 19:14 #7
Doc404 -> Det var, som sagt, lige det der skulle til, for at den gjorde som jeg ville have den til... Mange tak, du løste det ene problem :)
Hvis du lige lægger et svar, så får du også lidt point...

Borrisholt/Jens B -> Jeg kan ikke rigtig få "exit" komandoen til at virke... Når den støder på en "exit" i koden, så kommer den ikke længere, lige meget om den udfører den del eller ej (hvis det f.eks står inder "IF")
Derfor bruger jeg Doc404's forslag istedet...
Hvad angår mit andet spørgsmål, så synes jeg Hrc's forslag er nemmere... Dog skal det siges at dit også virker, så du skal også nok få nogle point :)

Hrc -> Jeg kan ikke få det med Exceptions til at virke, men du skrev jo også selv, at det ikke lige var begynderstof... Derimod var "StrToIntDef" komandoen faktisk endnu bedre end det jeg søgte! Det er bare skønt, så kan jeg komme videre med mit program... Menge tak, og en slat point til dig... ;)
Avatar billede borrisholt Novice
20. august 2005 - 19:30 #8
pc-pladder>> Giv du bare pointsne til Doc404  han mangler dem :D, og jeg tror jeg har.

Jeg kan ikke forstå du ikke kan få exit til at virke ... Send evt. dit projekt til Jens@Borrisholt.com så vil jeg gerne se hvad du gør forkert.

Exit komandoen er rar at kende ...

Jens B
Avatar billede doc404 Novice
20. august 2005 - 20:02 #9
Velbekommen
Avatar billede hrc Mester
20. august 2005 - 21:38 #10
Nu sidder jeg ved en Delphi og den rettede version af "exceptions" er her (mange fejl, beklager):

var
  i : integer;
begin
  try
    if Edit1.Text = '' then
      raise Exception.Create('Du indtastede intet i feltet. Jeg kunne godt bruge et tal');

    i := StrToInt(Edit1.Text);
  except
    on E: EConvertError do
      MessageDlg('Du indtastede ikke et tal'#13#10 + E.Message,mtError,[mbOK],0);
    on E: Exception do
      MessageDlg(E.Message,mtError,[mbOK],0);
  end;
end;
Avatar billede hrc Mester
20. august 2005 - 21:42 #11
Ovenstående eksempel er lidt besværligere idet der bliver "poppet" exceptions i Delphi. Vi fanger dem bare når vi kører videre. Prøv at køre exe-filen eller fjern "fluebenet" i "Stop on Delphi Exceptions" (Debugger Options, Language Exceptions).

(Jeg kan i øvrigt anbefale dig at hente GExperts og lære det at kende. Den udvider dit udviklingsmiljø med en masse smarte ting)
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:18 #12
Borrisholt/Jens B -> Nu har jeg fået "Exit" komandoen til at virke... Fandt ud af, at det var fordi jeg ikke gjorde som du skrev... Jeg havde nogle "Else" imellem... Ville ellers gerne give dig nogle point, men hvis du mener Doc404 har mere brug fo dem, ja så for han dem da... Hehe...

Hrc -> Ok... Takker... Tror dog ikke lige jeg vil bruge "exceptions" nu, men jeg vil da huske det til senere brug... Vil da også lige se på det der GExperts... Hehe...

I hvertfald mange tak for hjælpen, allesammen!
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:20 #13
Sådan... har delt pointene efter hvem der har mest brug fo dem... Hehe...
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:23 #14
Hvorfor nægter den mig bare at give andre point?
Det gjorde den også sidste gang jeg stillede et spørgsmål...
Hmm... Måske fordi jeg bruger FireFox?
Vil da så lige prøve med Internet Explorer...
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:26 #15
Nej!
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:27 #16
Nå... Så må vi vel vente og se... Sidst ville den lige pludselig godt... Håber da at den også vil det denne gang...
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:29 #17
Nu gik det... I var så bare nød til at have lige mange points allesammen... Nå... Jeg havde det nu også lidt skidt med ikke at give så mange point til nogle af jer, når i nu har julpet mig så meget videre... Endnu en gang tak...
Avatar billede pc-pladder Nybegynder
21. august 2005 - 20:30 #18
julpet = hjulpet... Hehe...
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