| Autor |
Beitrag |
Linus
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 10.01.03 16:18
Hallo Leutis
Da sich das Programm immer Aufhängt (bzw. bei der .exe fehlermeldung ausgibt) wenn in meiner Prozedur Werte aus Edit Feldern eingelesen werden sollen, die aber nicht ausgefüllt wurden (also leer sind), will ich das die procedure sofort abgebrochen wird, wenn das edit feld leer ist
ich habe es schon mit
(1) if Edit2.Text='' then exit;
if Edit4.Text='' then exit;
und mit
(2) if stelle='' then exit;
if zeichen='' then exit;
versucht  aber das funktiniert nicht  die procedure bricht nicht ab (bei 1) und delphi meldet inkompatible typen bei 2
das ist ein code...
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button14Click(Sender: TObject); var kette, zeichen: string; stelle: integer;
begin kette:=Edit1.Text; stelle:=StrToInt(Edit2.Text); zeichen:=Edit4.Text; Insert(zeichen, kette, stelle); Edit1.Text:=kette; end; |
Danke für eure Hilfe 
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Fr 10.01.03 17:31
Hallo,
Dein Problem liegt an der function StrToInt. Diese erzeugt einen EConvertError, wenn der zu wandelnde Text keinen gültigen Integer ergibt. Diesen Fall musst Du abfangen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button14Click(Sender: TObject); var kette, zeichen: string; stelle: integer; begin kette:=Edit1.Text; if (Length(kette)>0) then stelle:=StrToInt(Edit2.Text) else stelle:=0; if (stelle>0) then begin zeichen:=Edit4.Text; Insert(zeichen, kette, stelle); Edit1.Text:=kette; end; // if end; |
_________________ Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
|
|
Wolff68
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: Fr 10.01.03 18:12
| smiegel hat folgendes geschrieben: | ...
if (Length(kette)>0) then stelle:=StrToInt(Edit2.Text) else stelle:=0;
if (stelle>0) then
begin
...
|
Damit hast Du zwar geprüft, ob in Edit2 was drin ist, (wobei If Edit2.Text = '' then exit; etwas kürzer ist), aber Du weist noch immer nicht, ob nicht ein DAU da Buchstaben eingegeben hat.
Entweder also das StrToInt in einen Try-exept packen, oder selber vorher prüfen, ob nur Zahlen eingegeben wurden, oder bei der Eingabe alles verbotene erst gar nicht zulassen.
Try-except-Lösung: Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var kette, zeichen: string; stelle: integer; begin kette:=Edit1.Text; try stelle:=StrToInt(Edit2.Text); zeichen:=Edit4.Text; Insert(Edit4.Text, kette, stelle); Edit1.Text:=kette; except end; end; |
Selber prüfen: Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| function IsValidInteger(s: String): Boolean; var i : integer; begin result := false; IF length(s) = 0 then exit; IF NOT (s[1] in ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then exit; For i := 2 to length(s) do begin IF NOT (s[i] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then begin result := false; exit; end; end; result := true; end;
procedure TForm1.Button1Click(Sender: TObject); var kette, zeichen: string; stelle: integer; begin If Not IsValidInteger(Edit2.Text) then exit; kette:=Edit1.Text; stelle:=StrToInt(Edit2.Text); zeichen:=Edit4.Text; Insert(Edit4.Text, kette, stelle); Edit1.Text:=kette; end; |
Eingabe verhindern: Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.Button1Click(Sender: TObject); var kette, zeichen: string; stelle: integer; begin kette:=Edit1.Text; stelle:=StrToInt(Edit2.Text); zeichen:=Edit4.Text; Insert(Edit4.Text, kette, stelle); Edit1.Text:=kette; end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if ((Sender as TEdit).SelStart = 0) then begin // Zu beginn auch '-' zulassen IF NOT (Key in ['-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then Key := #0; end else begin IF NOT (Key in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']) then Key := #0; end; end; | Hier muß bei Programmstart bereits eine Zahl in Edit2 stehen, da ja nur geprüft wird was dazukommt.
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
|