toppy Geschrieben 10. April 2002 Geschrieben 10. April 2002 Ich möchte, dass das Programm einen Warnhinweis ausschreibt, wenn ein bestimmtes Feld leer ist. if(edtLadeU == ??) ?? - wie drück ich es aus das dies passieren soll, wenn das Feld leer ist....also nix drin steht ?? Zitieren
Orffi Geschrieben 10. April 2002 Geschrieben 10. April 2002 Wie wäre es mit: if ( edtLadeU == "" ) //... HTH Jan Zitieren
toppy Geschrieben 10. April 2002 Autor Geschrieben 10. April 2002 Das hab ich schon probiert. Da meckert er aber (also BorlandC++ 5.0) das es kein zulässiger Vergleichsbefehl wäre. Zitieren
Klotzkopp Geschrieben 10. April 2002 Geschrieben 10. April 2002 ~~~ moved to C++: Compiler, IDEs, APIs ~~~ Zitieren
maxim_42 Geschrieben 10. April 2002 Geschrieben 10. April 2002 Du kannst ja mit der Felddefinition einen definierten Anfangszustand schaffen. (Die Definition schafft den Zustand). Dieser Zustand wird veraendert wenn in das Feld geschrieben wird. Du musst also pruefen ob sich das Feld im Ausgangszustand befindet. char Feld[FELDLAENGE]={'\0'}; if(! (Feld[0])){ cout<<"Feld ist noch leer!"; } Für Felder anderer Datentypen ergeben sich natürlich andere Notwendigkeiten. Zitieren
Klotzkopp Geschrieben 10. April 2002 Geschrieben 10. April 2002 @toppy: Gibt es vielleicht ein Empty- oder Length-Attribut, dass Du abfragen könntest? Zitieren
toppy Geschrieben 10. April 2002 Autor Geschrieben 10. April 2002 Hab's jetzt auf null gesetzt (edtLadeU == 0), jetzt fängt er zwar noch net das Ereignis ab, wenn gar nix drin steht aber das kann ich später noch machen. Was anderes: Ich möchte ganz gerne einen "Druck" - Button einbauen. Daraufhin soll ein schon vordefinierter Text mit einer Tabelle ausgedruckt werden. In den Text soll'n aber Werte aus dem Programm übernommen werden. Bsp: Bei einer Ladespannung von jetzt eben der Wert den der Benutzer im Programm eingegeben hat (LadeU) beträgt die Spannung nach eingegebene Sekunden (Sekunden) und danach den berechneten Wert (Spannung) --> Bei einer Spannung von 220 beträgt die Spannung nach 6 Sekunden 3.49. Zitieren
Orffi Geschrieben 10. April 2002 Geschrieben 10. April 2002 edtLadeU ist also vom Typ TEdit, das solltest Du dazuschreiben. Denn dann ist edtLadeU == "" tatsächlich Unfug. Aber was sicherlich funktioniert ist folgendes: if ( edtLadeU -> Text == "" ) //... if ( edtLadeU == 0 ) ist auch keine tolle Idee (zumindestens in diesem Zusammenhang). Hier wird nur geschaut, ob edtLadeU kein Null-Zeiger ist. Davon darf man ruhig ausgehen, es sei denn, Du hast das TEdit zur Laufzeit erzeugt. HTH Jan Zitieren
toppy Geschrieben 10. April 2002 Autor Geschrieben 10. April 2002 @Orffi Hab's jetzt so geändert, nur wenn ich keinen Wert eingeben, kommt folgende BorlandC++ - Fehlermeldung: Exception der Klasse EConvertError......"ist kein gültiger Gleitkommawert" (hab's mal gekürzt) Zitieren
Orffi Geschrieben 10. April 2002 Geschrieben 10. April 2002 Ich habe jetzt nicht ganz vor Augen, wie Dein Quelltext aussieht und was Du wann machen willst. Aber Du hast ein TEdit (edtLadeU) Dort sollen Zahlen eingegeben werden, die Du dann mit StrToFloat in eine Fließkommazahl umwandelst. Das schließe ich jetzt einfach mal aus Deiner Exception. Diese Exception wird, wie Du schon richtig bemerkt hast, geworfen wenn ein leerer String in float (StrToFloat gibt long double zurück) umgewandelt werden soll. Aber auch bei "abc" wird natürlich eine Exception geworfen, weil auch "abc" nicht in float umgewandelt werden kann. Wenn Du jetzt eine OnClick-Methode für einen Button hast, die mit der Zahl von edtLadeU Berechnungen durchführen soll, dann kannst Du folgendes tun: if ( Edit1 -> Text == "" ) { Application -> MessageBox ( "Kein Wert in LadeU!", "Fehler", MB_OK ); edtLadeU -> SetFocus (); return; } float LadeU = StrToFloat ( edtLadeU -> Text ); //... Dies prüft wie gesagt nur, ob Du überhaupt etwas eingegeben hast. Oder Du arbeitest komplett mit Exceptions, was ja auch ganz schön ist: float LadeU; try { LadeU = StrToFloat ( Edit1 -> Text ); } catch ( EConvertError &e ) { Application -> MessageBox ( e.Message.c_str(), "Fehler", MB_OK ); edtLadeU -> SetFocus (); return; } //keine Fehler... Berechnung kann durchgeführt werden... HTH Jan Zitieren
Uruz Geschrieben 12. April 2002 Geschrieben 12. April 2002 scheint vielleicht albern zu klingen, aber... aehm... was haeltst du noch von einem else mir scheint, du schreibst deine warnung... und versuchst anschliessend doch noch den inhalt in einen float wert umzuwandeln ;o) Uruz Zitieren
Orffi Geschrieben 12. April 2002 Geschrieben 12. April 2002 Bitte beachte das return im if-Block. Ich steige bei einem leeren edtLadeU -> Text also aus der Funktion aus und brauche deswegen kein else. Das Gleiche gilt übrigens auch für die try-catch-Version. HTH Jan Zitieren
toppy Geschrieben 15. April 2002 Autor Geschrieben 15. April 2002 Danke Orffi für die Hilfe, klappt jetzt ordentlich. Aber sag mal, könnte man es noch so ausweiten das keine Buchstaben in den Editfeldern zugelassen werden ?? Zitieren
Orffi Geschrieben 15. April 2002 Geschrieben 15. April 2002 Du hast Du zwei Möglichkeiten: Als erstes kannst Du mit TMaskEdit im Bereich Zusätzliches arbeiten. Dort gibt es im Objektinspektor eine Eigenschaft EditMask. Dort kannst Du ein paar Sachen festlegen. Zweite Möglichkeit: LONG dwStyle = GetWindowLong ( Edit1->Handle, GWL_STYLE ); Hier sicherst Du die alten Style-angaben vom Edit-Feld (hier Edit1). Danach benutzt Du das logische oder um, den Style "nur Zahlen" (ES_NUMBER) hinzuzufügen. SetWindowLong ( Edit1->Handle, GWL_STYLE, dwStyle | ES_NUMBER ); HTH Jan Zitieren
toppy Geschrieben 15. April 2002 Autor Geschrieben 15. April 2002 Wenn ich die zweite Möglichkeit versuch anzuwenden, kommt folgende Fehlermeldung: Zeiger auf Struktur auf linker Seite von -> oder ->* erforderlich Es hat doch vorher geklappt, wieso hat er jetzt damit Probleme ?? Nachtrag: Die Fehlermeldung erscheint bei LadeU = StrToFloat(edtLadeU->Text); und auch bei deinen beiden Codezeilen Zitieren
Orffi Geschrieben 15. April 2002 Geschrieben 15. April 2002 Wo hast Du denn die beiden Codezeilen hingeschrieben? Sie müssen in den Konstruktor der Form auf der edtLadeU liegt. (Hatte ich vergessen dazu zu schreiben). HTH Jan Zitieren
toppy Geschrieben 15. April 2002 Autor Geschrieben 15. April 2002 Ähm hüstel wo müssen die liegen !? :confused: Das war jetzt zu fachmännisch für mich ausgedrückt, also bitte net böse sein, wenn ich nerv..... Zitieren
Uruz Geschrieben 15. April 2002 Geschrieben 15. April 2002 Original geschrieben von toppy Ähm hüstel wo müssen die liegen !? :confused: Das war jetzt zu fachmännisch für mich ausgedrückt, also bitte net böse sein, wenn ich nerv..... Das Formular, auf dem dein Eingabefeld liegt, hat eine Funktion wie FormCreate (nennt sich auch konstruktor bzw constructor)... da musst du das dann rein schreiben ;o) Zitieren
toppy Geschrieben 15. April 2002 Autor Geschrieben 15. April 2002 Wow, klappt supiiii.......Danke vielmals euch beiden So, jetzt läuft das Proggy eigentlich so wie ich es haben will, d.h. mir fällt erstma kein weiteres Problem ein Achja, Danke nochmals für eure Geduld mit mir DAU - Programmierer Zitieren
Orffi Geschrieben 15. April 2002 Geschrieben 15. April 2002 Das Formular, auf dem dein Eingabefeld liegt, hat eine Funktion wie FormCreate (nennt sich auch konstruktor bzw constructor)... Das ist leider nicht richtig! Die Funktion FormCreate wird auf das Ereignis OnCreate aufgerufen. Ein Konstruktor wird beim Erzeugen des Objekts aufgerufen. Es ist zwar egal, wo man es nun hineinschreibt, aber es ist nicht das Gleiche! Jan Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.