Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 ??

Wie wäre es mit:

if ( edtLadeU == "" )

//...

HTH

Jan

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.

  • Autor

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.

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

  • Autor

@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)

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

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

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

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

  • Autor

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

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

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)

  • Autor

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 :D

Achja, Danke nochmals für eure Geduld mit mir DAU - Programmierer ;)

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.