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 ??
Orffi Geschrieben 10. April 2002 Geschrieben 10. April 2002 Wie wäre es mit: if ( edtLadeU == "" ) //... HTH Jan
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.
Klotzkopp Geschrieben 10. April 2002 Geschrieben 10. April 2002 ~~~ moved to C++: Compiler, IDEs, APIs ~~~
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.
Klotzkopp Geschrieben 10. April 2002 Geschrieben 10. April 2002 @toppy: Gibt es vielleicht ein Empty- oder Length-Attribut, dass Du abfragen könntest?
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.
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
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)
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
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
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
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 ??
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
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
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
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.....
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)
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
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden