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 user profile iconNarses: 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

user profile iconThe6er hat folgendes geschrieben Zum zitierten Posting springen:

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

user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:

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:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconjakobwenzel hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:

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

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
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:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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/


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: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. ;-)