Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Checkbox Problem
The6er - Mi 29.04.09 22:00
Titel: Checkbox Problem
Hallo, ich habe folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Befehl := Location + ' -h ' + hash + ' -c' ; If Checkbox1.Checked= true then Befehl := Befehl + 'a'; If Checkbox2.Checked= true then Befehl := Befehl + 'A' ; If Checkbox3.Checked= true then Befehl := Befehl + '0'; If Checkbox4.Checked= true then Befehl := Befehl + '~' ;
If Checkbox1.Checked= false and Checkbox2.Checked= false and Checkbox3.Checked= false and Checkbox4.Checked= false then ShowMessage('Bitte Etwas Ankreuzen'); |
aber egal ob die Checkboxen Aktiviert sind oder nicht, aber macht NIE die oberne Anweisungen und zeigt IMMER die untere Nachricht an...
Weiß jemand was ich falsch gemacht habe?
Moderiert von
Narses: Delphi-Tags hinzugefügt
whitef - Mi 29.04.09 22:08
hi, versuch das mal ;)
Delphi-Quelltext
1: 2: 3: 4: 5:
| If Checkbox1.Checked = False then if Checkbox2.Checked = False then if Checkbox3.Checked= False then if Checkbox4.Checked = False then ShowMessage('Bitte Etwas Ankreuzen'); |
jaenicke - Mi 29.04.09 22:10
The6er hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| If Checkbox4.Checked= true then Befehl := Befehl + '~' ;
If Checkbox1.Checked= false and Checkbox2.Checked= false and Checkbox3.Checked= false and Checkbox4.Checked= false then | |
Der Vergleich mit Booleanwerten (z.B.
if x = true then) ist nicht nur unschön und unlogisch, sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
http://www.delphi-forum.de/viewtopic.php?p=548760#548760
Mehr dazu steht hier unter Anfängerfehler:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/
Richtig:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| if Checkbox4.Checked then Befehl := Befehl + '~';
if not (Checkbox1.Checked or Checkbox2.Checked or Checkbox3.Checked or Checkbox4.Checked) then ... |
whitef hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| If Checkbox1.Checked = False then if Checkbox2.Checked = False then | |
Erstens ist der Vergleich mit False falsch, zweitens wird das so extrem unübersichtlich...
jakobwenzel - Mi 29.04.09 22:13
Kleine Ergänzung: Nicht funktioniert hat das am Anfang jedoch nur nicht weil Klammern fehlen:
Delphi-Quelltext
1: 2: 3:
| If (Checkbox1.Checked= false) and (Checkbox2.Checked= false) and (Checkbox3.Checked= false) and( Checkbox4.Checked= false) then |
Aber es bleibt trotzdem schlechter Stil :wink:
jaenicke hat folgendes geschrieben : |
| Erstens ist der Vergleich mit False falsch,[...] |
Wann liefert der denn falsche Ergebnisse?
The6er - Mi 29.04.09 22:19
Danke, ihr habt mir sehr geholfe, nächstesmal schau ich in die Anfänger Sektion....
jaenicke - Mi 29.04.09 22:22
jakobwenzel hat folgendes geschrieben : |
jaenicke hat folgendes geschrieben : | | Erstens ist der Vergleich mit False falsch,[...] |
Wann liefert der denn falsche Ergebnisse? |
Ok, ganz genau gesagt ist nur der mit True wirklich falsch, aber diese Unterscheidung führt nur wieder zu Fehlern... :roll:
Und wenn man das wirklich verstanden hat und nicht mehr mit True vergleicht, dann kommt man gar nicht erst auf die Idee mit False zu vergleichen...
Womit dann nebenbei auch die Klammerung eben wegfällt.
whitef - Mi 29.04.09 22:54
whitef hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| If Checkbox1.Checked = False then if Checkbox2.Checked = False then | |
:D
kommt davon wenn man den ganzen tag mit VBA arbeitet und abends mal ne stunde im delphi forum was posten möchte... :D
ffgorcky - So 03.05.09 16:27
Also ich hätte das eher so gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Befehl := Location + ' -h ' + hash + ' -c' ; BefehlKopie:=Befehl; If Checkbox1.Checked= true then Befehl := Befehl + 'a'; If Checkbox2.Checked= true then Befehl := Befehl + 'A' ; If Checkbox3.Checked= true then Befehl := Befehl + '0'; If Checkbox4.Checked= true then Befehl := Befehl + '~' ;
If BefehlKopie=Befehl then ShowMessage('Bitte Etwas Ankreuzen'); |
Es bleibt aber ja die Frage, ob Du den Checkboxen auch die Möglichkeit eines "grauen Kreuzes" gibst.
Die Möglichkeit ist ja, wenn man etwas auf jeden Fall so lassen möchte, wie es schon vorher war,
aber sich im Moment keien Gedanken darüber machen will/kann, ob das denn nun vorher angehakt war oder nicht.
jaenicke - So 03.05.09 16:34
ffgorcky hat folgendes geschrieben : |
Also ich hätte das eher so gelöst:
Delphi-Quelltext 1: 2: 3: 4:
| Befehl := Location + ' -h ' + hash + ' -c' ; BefehlKopie:=Befehl; If Checkbox1.Checked= true then Befehl := Befehl + 'a'; | |
:hair: :hair: :roll:
ffgorcky - So 03.05.09 16:45
Heißt das also, man sollte lieber alles mit
Delphi-Quelltext
1: 2:
| If not Checkbox1.Checked= false then Befehl := Befehl + 'a'; |
lösen?
Naja - ist mir auch recht...
Gausi - So 03.05.09 16:46
Nein. Einfach mit
Delphi-Quelltext
1: 2:
| If CheckBox1.Checked then ShowMessage('Checkbox 1 ist gecheckt'); |
jaenicke - So 03.05.09 16:58
Schau mal unabhängig vom Programmieren. Welchen dieser beiden Sätze wirst du dann sagen:
- Wenn "das Wetter ist schön" wahr ist, dann werde ich heute Fußball spielen gehen.
- Wenn das Wetter schön ist, dann werde ich heute Fußball spielen gehen.
Na? Wirst du wirklich den ersten Satz nehmen? ;-)
Eben, genau das ist aber das, was du in Delphi geschrieben hast...
Regan - So 03.05.09 17:00
Und danach wollte er folgendes schreiben:
| Zitat: |
Wenn "das Wetter ist schlecht" falsch ist, dann werde ich heut Fußball spielen gehen.
|
jaenicke - So 03.05.09 17:03
Nein, eher:
Wenn nicht "das Wetter ist gut" falsch ist, dann... :mrgreen:
Man muss sich das einfach einmal richtig überlegen, dann kommt man erst gar nicht mehr auf solche Verrenkungen. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!