Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Edit-Felder auf Inhalt prüfen (https://www.delphipraxis.net/186079-edit-felder-auf-inhalt-pruefen.html)

Rookie91 1. Aug 2015 12:05

Edit-Felder auf Inhalt prüfen
 
Hallo Leute,

ich habe folgendes Problem: ich möchte 2 Edit-Felder, deren Inhalt für eine Berechnung notwendig ist, auf Inhalt überprüfen. Falls dort nichts steht soll eine Message gezeigt werden und im Edit-Feld, wo das Ergebnis gezeigt wird: Berechnung fehlgeschlagen!.
Mein Quelltext:

procedure TForm2.Button1Click(Sender: TObject);
var V,Dichte,d,n,Re: real;
begin
V:= StrToFloat(edit1.text);
Dichte:= StrToFloat(edit11.text);
n:= StrToFloat(edit10.Text)/1000000;
case combobox2.ItemIndex of
0: d:= 0.01;
1: d:= 0.012;
2: d:= 0.015;
3: d:= 0.02;
4: d:= 0.025;
5: d:= 0.032;
6: d:= 0.04;
7: d:= 0.05;
end;
Re:= 4*V*Dichte/d/n/3.1416;
if Re >= 2320 then begin ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!'); end;
if (edit1.Text='') or (edit2.text='') then begin ShowMessage('Es muss ein Wert angegeben werden!'); end;
if (edit1.Text='') or (edit2.text='') then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;
if not (edit1.text='') or (edit2.text='') then begin

case combobox2.ItemIndex of
0: ... Berechnung ...

end;
end;

if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;


end;


Für Re >= 2320 funktioniert alles. Bei leeren Edit-Feldern kommt die MEldung: " ist not al valid floating point value.

Kann mir jemand weiterhelfen?

Gruß

DeddyH 1. Aug 2015 12:17

AW: Edit-Felder auf Inhalt prüfen
 
Strukturier Deinen Code doch erst einmal. Mit den Delphi-Tags (die "Helm"-Schaltfläche im Beitragseditor) kannst Du ihn dann im Forum schön formatiert darstellen.

zeras 1. Aug 2015 12:18

AW: Edit-Felder auf Inhalt prüfen
 
Prüfe doch, ob das Editfeld leer ist mit
Delphi-Quellcode:
if edxxx.text <> ''then

DeddyH 1. Aug 2015 12:20

AW: Edit-Felder auf Inhalt prüfen
 
Das ist im Grunde genommen wurscht, wie man vergleicht. Aber man sollte das nach Möglichkeit nur einmal machen müssen. Tipp: zu einem If-Zweig kann man auch einen Else-Zweig schreiben.

Rookie91 1. Aug 2015 13:07

AW: Edit-Felder auf Inhalt prüfen
 
Hallo Leute,

ich habe folgendes Problem: ich möchte 2 Edit-Felder, deren Inhalt für eine Berechnung notwendig ist, auf Inhalt überprüfen. Falls dort nichts steht soll eine Message gezeigt werden und im Edit-Feld, wo das Ergebnis gezeigt wird: Berechnung fehlgeschlagen!.
Mein Quelltext:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var V,Dichte,d,n,Re: real;
begin
V:= StrToFloat(edit1.text);
Dichte:= StrToFloat(edit11.text);
n:= StrToFloat(edit10.Text)/1000000;
case combobox2.ItemIndex of
0: d:= 0.01;
1: d:= 0.012;
2: d:= 0.015;
3: d:= 0.02;
4: d:= 0.025;
5: d:= 0.032;
6: d:= 0.04;
7: d:= 0.05;
end;
Re:= 4*V*Dichte/d/n/3.1416;
if Re >= 2320 then begin ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!'); end;
if (edit1.Text='') or (edit2.text='') then begin ShowMessage('Es muss ein Wert angegeben werden!'); end;
if (edit1.Text='') or (edit2.text='') then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;
if not (edit1.text='') or (edit2.text='') then begin

case combobox2.ItemIndex of
0: ... Berechnung ...

end;
end;

if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;


end;

Für Re >= 2320 funktioniert alles. Bei leeren Edit-Feldern kommt die MEldung: " ist not al valid floating point value.

Kann mir jemand weiterhelfen?

Gruß

zeras 1. Aug 2015 13:17

AW: Edit-Felder auf Inhalt prüfen
 
Wie oben von mir schon geschrieben. Prüfe beide Edits auf = '', dann steht in beiden nichts drin und du kannst eine Fehlermeldung ausgeben.
Du kannst auch
Delphi-Quellcode:
TryStrToFloat
nutzen, um den Fehler abzufangen.

DeddyH 1. Aug 2015 13:18

AW: Edit-Felder auf Inhalt prüfen
 
Zähl doch mal, wie oft die folgenden Schnippsel in Deinem Code vorkommen:
Zitat:

Delphi-Quellcode:
case combobox2.ItemIndex of

Zitat:

Delphi-Quellcode:
if Re >= 2320 then

Zitat:

Delphi-Quellcode:
(edit1.Text='') or (edit2.text='')

Wieso ist das so? Geht das nicht auch anders (siehe z.B. den Tipp in meinem letzten Posting)? Das meinte ich mit Strukturieren, das Formatieren fürs Forum war nur Nebensache (wobei man seine Beiträge auch 24 Stunden lang editieren kann und sie nicht wiederholen muss).

DeddyH 1. Aug 2015 13:23

AW: Edit-Felder auf Inhalt prüfen
 
Zitat:

Zitat von zeras (Beitrag 1310598)
Wie oben von mir schon geschrieben. Prüfe beide Edits auf = '', dann steht in beiden nichts drin und du kannst eine Fehlermeldung ausgeben.

Dann ist ja alles in Butter:
Zitat:

Delphi-Quellcode:
if (edit1.Text='') or (edit2.text='') then begin ShowMessage('Es muss ein Wert angegeben werden!'); end;

[edit] Also gut, mal ein Beispiel (auf eine bessere Benennung habe ich bewusst verzichtet):
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
  Zahl1, Zahl2, Ergebnis: double;
  Ausgabe: string;
begin
  //Pessimistische Vorbelegung des Augabestrings
  Ausgabe := 'Berechnung fehlgeschlagen';
  if not TryStrToFloat(Edit1.Text, Zahl1) then
    begin
      ShowMessage('Ungültige Eingabe für die erste Zahl');
      Edit1.SetFocus;
      Edit1.SelectAll;
    end
  else if not TryStrToFloat(Edit2.Text, Zahl2) then
    begin
      ShowMessage('Ungültige Eingabe für die zweite Zahl');
      Edit2.SetFocus;
      Edit3.SelectAll;
    end
  //Hier können wir weitermachen, Zahl1 und Zahl2 sind aus den Eingaben befüllt
  else
    begin
      Ergebnis := Zahl1 + Zahl2;
      Ausgabe := FloatToStr(Ergebnis);
    end;
  //Ausgabestring darstellen
  //(enthält entweder das Rechenergebnis oder die Fehlermeldung von ganz oben)
  Edit3.Text := Ausgabe;
end;
[/edit]

Rookie91 1. Aug 2015 16:35

AW: Edit-Felder auf Inhalt prüfen
 
Hey,

habe das jetzt mal so geändert:
ich weiß leider nicht, was mit formatieren gemeint ist :oops:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var V,Dichte,n,Re,Laenge,Ergebnis,d: double;
    Ausgabe: string;
begin
V:= StrToFloat(edit1.text)/1000;
Dichte:= StrToFloat(edit11.text);
n:= StrToFloat(edit10.Text)/1000000;
Ausgabe:= 'Berechnung fehlgeschlagen';
case combobox2.ItemIndex of
0: d:= 0.01;
1: d:= 0.012;
2: d:= 0.015;
3: d:= 0.02;
4: d:= 0.025;
5: d:= 0.032;
6: d:= 0.04;
7: d:= 0.05;
8: d:= 0.06;
9: d:= 0.065;
10: d:= 0.08;
11: d:= 0.1;
end;
Re:= 4*V*Dichte/d/n/3.1416;
  if Re >= 2320 then begin ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!');

  if not TryStrToFloat(edit1.Text, V) then begin showmessage('Werte für Volumenstrom und Länge eingeben!');
  edit1.SetFocus;
  edit1.SelectAll;
  end
  else if not TryStrToFloat(edit2.Text, Laenge) then begin showmessage('Werte für Volumenstrom und Länge eingeben!');
  edit2.SetFocus;
  edit2.SelectAll;
  end
  else begin

Ergebnis:= 40.744/1000000/d/d/d/d*StrToFloat(edit10.Text)*StrToFloat(edit1.Text)*StrToFloat(edit2.text);
Ausgabe := FloatToStr(Ergebnis);
end;
edit3.text:= Ausgabe;

if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;

end;
end;

Rookie91 1. Aug 2015 16:36

AW: Edit-Felder auf Inhalt prüfen
 
jetzt funktioniert die Rechnung sogar nicht mehr...

DeddyH 1. Aug 2015 16:50

AW: Edit-Felder auf Inhalt prüfen
 
Zeile 1:
Zitat:

Delphi-Quellcode:
V:= StrToFloat(edit1.text)/1000;

Etwa 20 Zeilen später:
Zitat:

Delphi-Quellcode:
if not TryStrToFloat(edit1.Text, V) then begin showmessage('Werte für Volumenstrom und Länge eingeben!');

Also erst einmal fröhlich zuweisen und erst viel später prüfen, ob das überhaupt geht? Schau Dir doch mein Beispiel noch einmal an.

zeras 1. Aug 2015 17:01

AW: Edit-Felder auf Inhalt prüfen
 
Hallo,

du musst die Prüfung vorher machen und nicht erst rechnen und dann weiter unten prüfen.

Delphi-Quellcode:
V:= StrToFloat(edit1.text)/1000;
Dichte:= StrToFloat(edit11.text);
n:= StrToFloat(edit10.Text)/1000000;
Das sind alles Funktionen, die "schief" gehen können. Wenn zum Beispiel ein Feld leer ist oder vielleicht ein Buchstabe eingetipt wurde.
Diese kannst du mit Tryxxx prüfen, ob die vermeintliche Zahl gewandelt werden konnte. Dann solltest du erst rechnen.

Rookie91 1. Aug 2015 17:53

AW: Edit-Felder auf Inhalt prüfen
 
Hey,

ich bekomms nicht hin :(
ich will jetzt einfach nur, dass die Rechnung wieder funktioniert. Das soll dann reichen. Ich habe alles auf den Anfangszustand gebracht. Wisst ihr, warum das jetzt trotzdem nicht funktioniert?

Es kommt die Meldung: Floating point overflow

zeras 1. Aug 2015 18:00

AW: Edit-Felder auf Inhalt prüfen
 
Wie sieht es denn aus mit dem Durchsteppen des Programms?
Dann wirst du sehen, wo es hängt.
Versuche doch am Anfang alles mit Try in Float zu wandeln. Wenn die Funktion fehlschlägt, dann konnte der Wert nicht in einen Float Wert gewandelt werden.
Das sollte doch machbar sein von dir oder?

SProske 1. Aug 2015 18:09

AW: Edit-Felder auf Inhalt prüfen
 
Zitat:

Zitat von Rookie91 (Beitrag 1310613)
Hey,
ich weiß leider nicht, was mit formatieren gemeint ist :oops:

https://de.wikipedia.org/wiki/Quelltextformatierung

Kurz gefasst die Strukturierung des Quelltextes zur besseren Les- und Wartbarkeit

Ich habe das mal für deinen geposteten Quelltext versucht...

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  V, Dichte, n, Re, Laenge, Ergebnis, d: Double;
  Ausgabe: string;
begin
  V:= StrToFloat(edit1.text)/1000;
  Dichte:= StrToFloat(edit11.text);
  n:= StrToFloat(edit10.Text)/1000000;
  Ausgabe:= 'Berechnung fehlgeschlagen';
  case combobox2.ItemIndex of
    0: d:= 0.01;
    1: d:= 0.012;
    2: d:= 0.015;
    3: d:= 0.02;
    4: d:= 0.025;
    5: d:= 0.032;
    6: d:= 0.04;
    7: d:= 0.05;
    8: d:= 0.06;
    9: d:= 0.065;
    10: d:= 0.08;
    11: d:= 0.1;
  end;

  Re:= 4*V*Dichte/d/n/3.1416;

  if Re >= 2320 then
  begin
    ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!');

    if not TryStrToFloat(edit1.Text, V) then
    begin
      showmessage('Werte für Volumenstrom und Länge eingeben!');
      edit1.SetFocus;
      edit1.SelectAll;
    end
    else if not TryStrToFloat(edit2.Text, Laenge) then
    begin
      showmessage('Werte für Volumenstrom und Länge eingeben!');
      edit2.SetFocus;
      edit2.SelectAll;
    end
    else begin
      Ergebnis:= 40.744/1000000/d/d/d/d*StrToFloat(edit10.Text)*StrToFloat(edit1.Text)*StrToFloat(edit2.text);
      Ausgabe := FloatToStr(Ergebnis);
    end;
    edit3.text:= Ausgabe;
    if Re >=2320 then
    begin
      edit3.text:= 'Berechnung fehlgeschlagen';
    end;
  end;
end;
Dabei sieht man dann unter anderem, dass der gesamte Codeblock nach
Delphi-Quellcode:
if Re >= 2320 then
auch nur in diesem Falle ausgeführt wird.

Rookie91 1. Aug 2015 18:36

AW: Edit-Felder auf Inhalt prüfen
 
Wie sollte das denn aussehen? Ich muss doch zwischen "end else begin" die Variablen zuweisen ansonsten kann doch nicht gerechnet werden oder?
Bin hier total am verzweifeln. Das Überprüfen ist nicht zwingend notwendig, aber dadurch, dass ich es versucht habe, klappt gar nichts mehr.
Ich sehe woran es hängt, nämlich Re:= 4*..., allerdings kann ich damit rein gar nichts anfangen!

DeddyH 1. Aug 2015 18:39

AW: Edit-Felder auf Inhalt prüfen
 
Nochmal: erst auf gültige Eingaben prüfen und dann entweder rechnen oder Fehlermeldung ausgeben. Nicht andersherum.

SProske 1. Aug 2015 18:49

AW: Edit-Felder auf Inhalt prüfen
 
Um vielleicht mal einen Ansatz mit etwas Quellcode zu liefern...

So fängt es bei dir an:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  V, Dichte, n, Re, Laenge, Ergebnis, d: Double;
  Ausgabe: string;
begin
  //schlägt fehl, wenn in Edit1 Mist drin steht -> exception
  V:= StrToFloat(edit1.text)/1000;
Und so sollte es anfangen

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  V, Dichte, n, Re, Laenge, Ergebnis, d: Double;
  Ausgabe: string;
begin
  //hier wird versucht, V aus Edit1 einzulesen
  //wenn das funktioniert, geht es mit true weiter
  if TryStrToFloat(edit1.text, V) then
  begin
    V := V/1000;
    {weitere Werte einlesen, rechnen, Rechnung prüfen}
  end
  else begin
    showmessage('Werte für Volumenstrom und Länge eingeben!');
    edit1.SetFocus;
    edit1.SelectAll;
  end;
end;

Rookie91 1. Aug 2015 20:02

AW: Edit-Felder auf Inhalt prüfen
 
Bevor ich mich daran nochmal versuche, möchte ich aber, dass die Rechnung wieder einwandfrei läuft und ich das ganze dann nochmal abspeichern kann. Was ist denn jetzt daran falsch?:


Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var d,V,Dichte,n,Re: real;
begin
V:= StrToFloat(edit1.Text)/1000;
Dichte:= StrToFloat(edit11.Text);
n:= StrToFloat(edit10.Text)/1000000;
case combobox2.ItemIndex of
0: d:= 0.01;
1: d:= 0.012;
2: d:= 0.015;
3: d:= 0.02;
4: d:= 0.025;
5: d:= 0.032;
6: d:= 0.04;
7: d:= 0.05;
8: d:= 0.06;
9: d:= 0.065;
10: d:= 0.08;
11: d:= 0.1;
end;
Re:= 4*V*Dichte/d/n/3.1416;

if Re >= 2320 then begin ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den Rohrdurchmesser!'); end;

edit3.text:= FloatToStr(40.744/d/d/d/d*n*V*StrToFloat(edit2.text));

if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;

end;

mkinzler 1. Aug 2015 20:14

AW: Edit-Felder auf Inhalt prüfen
 
Es wurden Dir achon viele Tipps gegeben, welche Du einfach so in den Wind schreibst (Formatierung Try<Typ>To<Typ> usw.)

SProske 1. Aug 2015 20:19

AW: Edit-Felder auf Inhalt prüfen
 
Welche Programmierumgebung verwendest du denn? Bist du schonmal über den Debugger Schritt für Schritt durchgegangen?
Was genau läuft nicht so, wie es soll?

zeras 1. Aug 2015 20:21

AW: Edit-Felder auf Inhalt prüfen
 
Zitat:

Zitat von SProske (Beitrag 1310631)
Bist du schonmal über den Debugger Schritt für Schritt durchgegangen?
Was genau läuft nicht so, wie es soll?

Das hatte ich auch schon gesagt, aber offensichtlich überliest er solche Hinweise.

SProske 1. Aug 2015 20:27

AW: Edit-Felder auf Inhalt prüfen
 
Na vielleicht erhalten wir ja diesmal eine Antwort, anhand deren man weiterhelfen kann.

Rookie91 1. Aug 2015 21:09

AW: Edit-Felder auf Inhalt prüfen
 
Debugger durchgehen?

Also wenn ich das Programm laufen lasse und berechnen will (also die Rechnung, in der Edit1 und Edit2 benutzt werden und in Edit3 das Ergebnis gezeigt wird) zeigt er mir das hier: "Re:= 4*V*Dichte/d/n/3.1416;" rot an. Dazu die Meldung "floating point overflow". Wenn ich F8 drücke (ist das mit debuggen gemeint?) zeigt er mir noch folgendes rot an: "if Re >=2320 then begin edit3.text:= 'Berechnung fehlgeschlagen'; end;".

Hab den gleichen Quellcode in eine ältere Version des Programms kopiert, da läufts einwandfrei.

Danke, dass ihr mich noch nicht aufgegeben habt :oops:

SProske 1. Aug 2015 21:30

AW: Edit-Felder auf Inhalt prüfen
 
Nochmals die Frage, welche Programmierumgebung.. Lazarus? Delphi?

Du solltest, wenn du auf die Leiste links des Quelltextes klickst, einen Haltepunkt setzen können. Der Debugger sollte dann an dieser Stelle anhalten und du solltest sehen können, welche Werte die Variablen zu diesem zeitpunkt haben. Das erklärt dann möglicherweise schon den Fehler..

Rookie91 2. Aug 2015 10:49

AW: Edit-Felder auf Inhalt prüfen
 
Ich benutze Delphi7.

Ok also ich setze den Haltepunkt, die Zeile ist dann mit einem roten Punkt markiert. Dann starte ich mit F9. Wenn ich dann berechnen will, dann kommt wieder die gleiche Fehlermeldung wie beschrieben mit den rot markierten Formeln.

SProske 2. Aug 2015 11:04

AW: Edit-Felder auf Inhalt prüfen
 
Du compilierst den Programm mit F9, es startet ohne Fehlermeldung. Dann trägst du deine Werte in die Edit-Felder ein, klickst den Button zum Berechnen und dein Programm schmiert mit einer Exception "floating point overflow" ab?

Wenn du den Haltepunkt auf die erste Zeile deiner Prozedur (
Delphi-Quellcode:
V:= StrToFloat(edit1.Text)/1000;
) setzt - wird dieser Haltepunkt erreicht? Danach kannst du mit F8 Zeile für Zeile weitergehen und prüfen, mit welchen Werten konkret gerechnet wird.

Floating Point Overflow deutet auf Werte hin, die den Wertebreich deines Datentypen "sprengen", vielleicht ist ja einer deiner Werte nicht korrekt initialisiert.

Rookie91 2. Aug 2015 11:43

AW: Edit-Felder auf Inhalt prüfen
 
Ja, ich denke er wird erreicht. Es steht nun zumindest ein grünes Häkchen auf dem roten Punkt. Wenn ich dann mit F8 weiter gehe, sind diese Zeilen rot gefärbt:
Delphi-Quellcode:
Dichte:= StrToFloat(edit11.Text);
n:= StrToFloat(edit10.Text)/1000000;
case combobox2.ItemIndex of
wenn ich dann nochmal F8 drücke springt er zu
Delphi-Quellcode:
Re:= 4*V*Dichte/d/n/3.1416;
wenn ich ein weiteres mal F8 drücke kommt wieder die Meldung "floating point overflow". Also hängt es mit der letzten Formel zusammen? Bei d ist auch ein anderer Wert angegeben wenn ich die Maus drauf halte. Wie kann das sein? Was muss ich ändern?

DeddyH 2. Aug 2015 11:47

AW: Edit-Felder auf Inhalt prüfen
 
Wo wird d denn ein Wert zugewiesen, vor oder nach der Formel?

Rookie91 2. Aug 2015 11:48

AW: Edit-Felder auf Inhalt prüfen
 
vorher

Rookie91 2. Aug 2015 11:52

AW: Edit-Felder auf Inhalt prüfen
 
Nochmal der Quellcode:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var d,V,Dichte,n,Re: real;
begin
 V:= StrToFloat(edit1.Text)/1000;
 Dichte:= StrToFloat(edit11.Text);
 n:= StrToFloat(edit10.Text)/1000000;
   case combobox2.ItemIndex of
   0: d:= 0.01;
   1: d:= 0.012;
   2: d:= 0.015;
   3: d:= 0.02;
   4: d:= 0.025;
   5: d:= 0.032;
   6: d:= 0.04;
   7: d:= 0.05;
   8: d:= 0.06;
   9: d:= 0.065;
   10: d:= 0.08;
   11: d:= 0.1;
   end;
 Re:= 4*V*Dichte/d/n/3.1416;

   if Re >= 2320 then
   begin
   ShowMessage('Es liegt keine laminare Strömung mehr vor! Reduziere den Volumenstrom und/oder erhöhe den  Rohrdurchmesser!');
   end;

 edit3.text:= FloatToStr(40.744/d/d/d/d*n*V*StrToFloat(edit2.text));

   if Re >=2320 then
   begin
   edit3.text:= 'Berechnung fehlgeschlagen';
   end;

end;

DeddyH 2. Aug 2015 11:53

AW: Edit-Felder auf Inhalt prüfen
 
Dann kann ja kein anderer Wert drinstehen, es sei denn, er wird zwischendurch wieder überschrieben oder der ItemIndex der ComboBox passt zu keinem case-Label. Gibt denn der Compiler keine Meldungen/Warnungen aus?

Rookie91 2. Aug 2015 12:02

AW: Edit-Felder auf Inhalt prüfen
 
Habe es gerade durch Zufall herausgefunden: Der Grund war wie DeddyH schreibt der itemindex der combobox. Der stand auf -1. Bin mir sicher, dass ich daran nichts geändert habe..naja mit itemindex 0 funktionierts wieder!

Vielen Dank euch!!

idefix2 2. Aug 2015 14:09

AW: Edit-Felder auf Inhalt prüfen
 
Aber der itemindex der Combobox hängt doch davon ab, was du anklickst, nicht vom Programm :stupid:

Sir Rufo 2. Aug 2015 14:23

AW: Edit-Felder auf Inhalt prüfen
 
Zitat:

Zitat von idefix2 (Beitrag 1310680)
Aber der itemindex der Combobox hängt doch davon ab, was du anklickst, nicht vom Programm :stupid:

Aber diesen Fall hat er nicht abgefragt und somit bleibt
Delphi-Quellcode:
d
uninitialisiert, was dann ein eher zufälliges Ergebnis produziert. ;)

idefix2 2. Aug 2015 15:56

AW: Edit-Felder auf Inhalt prüfen
 
Klar, er prüft ja auch sonst nichts - bloss frage ich mich, warum er sich über unsinnige Ergebnisse wundert, wenn er dem Programm nicht eingibt, was es rechnen soll...

Zitat:

Zitat von Rookie91 (Beitrag 1310666)
... der itemindex der combobox. Der stand auf -1. Bin mir sicher, dass ich daran nichts geändert habe..naja mit itemindex 0 funktionierts wieder!

(unterstrichen von mir)

Dejan Vu 2. Aug 2015 16:02

AW: Edit-Felder auf Inhalt prüfen
 
Ich meine mich zu erinnern, das der ItemIndex auf -1 steht, solange man nichts in der Combo *verändert*, d.h. steht dort schon eine Auswahl drin (per OI reingepackt), habe ich dort eben die -1 drin.

Daher verlasse ich mich erst gar nicht auf den ItemIndex und setze ihn
Delphi-Quellcode:
with ComboBox1 do ItemIndex := Items.IndexOf(Text);
(Komm mir keiner mit 'with' ist böse)

Aber, was lehrt uns das? Immer! Immer und ohne Ausnahme: In ein Case-Statement gehört ein ELSE!

idefix2 2. Aug 2015 16:11

AW: Edit-Felder auf Inhalt prüfen
 
Wobei in dem Fall ein case Statement ohnehin Unsinn ist:
Delphi-Quellcode:
const werte:array[0..10] of real = (xx, xx, ...);
...

d:=werte[combobox2.ItemIndex]


Zitat:

Daher verlasse ich mich erst gar nicht auf den ItemIndex und setze ihn with ComboBox1 do ItemIndex := Items.IndexOf(Text);
Eine Kombobox ist doch dazu da, dass man zur laufzeit einen Wert anklickt, nicht dazu, dass man vom Programm her den Wert setzt!

idefix2 2. Aug 2015 16:20

AW: Edit-Felder auf Inhalt prüfen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1310692)
Ich meine mich zu erinnern, das der ItemIndex auf -1 steht, solange man nichts in der Combo *verändert*, d.h. steht dort schon eine Auswahl drin (per OI reingepackt), habe ich dort eben die -1 drin.

Nein, da steht schon der richtige Wert drin, der zum Text passt (ausser der Text kommt in der Itemliste nicht vor)

andersrum: es wird der Text angezeigt, der zu Itemindex passt, auch wenn im OI ein anderer text eingegeben wurde. Will man eine Vorauswahl haben, muss man im OI den Itemindex entprechend setzen - es hängt natürlich auch vom Style der Compbobox ab. Aber jedenfalls sieht der User, was er ausgewählt hat, wenn er auf den Execute-button (oder so) klickt.

hoika 2. Aug 2015 17:31

AW: Edit-Felder auf Inhalt prüfen
 
Hallo,

um noch mal auf das Abfangen leerer Edit-Felder zurückzukommen.

Dein if editxxx.Text='' muss vor dem ersten StrToFloat(editxxx.Text) kommen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz