Autor |
Beitrag |
theevilworm
      
Beiträge: 61
|
Verfasst: Sa 24.10.09 22:17
Hallo,
bin gerade auf dieses Problem gestoßen und weiß nicht, wie ich es umgehen kann:
Ich habe ein Editfeld und daneben eine Checkbox. Wenn ich bei der Checkbox einen Haken setze, soll das Editfeld deaktiviert werden, wenn ich den Haken wieder raus nehme, soll es wieder aktiviert werden.
Leichter gesagt als getan, da ich kein Ereignis im Objektinspektor gefunden habe, was explizit zwischen "Haken rein" und "Haken raus" unterscheidet, habe ich es folgendermaßen versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin If Checkbox1.Checked=true Then begin edit2.Enabled:=false; end; If checkbox1.Checked=false then begin edit1.enabled:=true; end; end; |
Wenn ich nun den Haken setze, wird Edit1 auch deaktiviert, wenn ich ihn wieder rausnehme, aber nicht wieder aktiviert. Wieso bloß?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 24.10.09 22:32
Delphi-Quelltext 1:
| Edit1.Enabled := CheckBox1.Checked; |
Fertig.
du brauchst übrigens nicht alles zu highlighten
Nebenbei: Niemals auf =True oder =False abfragen. Lieber: If MyBoolean then .. oder If not MyBoolean then..
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
theevilworm 
      
Beiträge: 61
|
Verfasst: Sa 24.10.09 22:36
Dankeschön
Hoffentlich geh ich euch noch nicht auf den Sack nach meinen 2 Tagen hier
Zitat: |
Nebenbei: Niemals auf =True oder =False abfragen. Lieber: If MyBoolean then .. oder If not MyBoolean then..
|
Wie du sicherlich bemerkt hast, bin ich noch ziemlicher Anfänger in Delphi, ich habe das mit den eigenen Booleans noch nicht verstanden. Daher diese umständliche Abfragerei von Eigenschaften.
Hast du in diesem Fall einfach "CheckBox1.Checked=true" unter MyBoolean vereint? Irgendwie habe ich in diesem Bereich ein Brett vorm Kopf
Edit:
Dein Vorschlag funktioniert bei mir gar nicht
Diese Zeile muss doch in die Prozedure Checkbox1Click, oder? Bei mir passiert da nix.
Zuletzt bearbeitet von theevilworm am Sa 24.10.09 22:44, insgesamt 1-mal bearbeitet
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 24.10.09 22:43
Jo, genau. Bei deinem Quellcode wäre es
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin If Checkbox1.Checked Then begin edit2.Enabled:=false; end; If not checkbox1.Checked then begin edit1.enabled:=true; end; end; |
Ich hab nur leider gerade nicht die Erklärung zur Hand, warum das so ist.
Unter Delphi selber ist das erstmal nicht schlimm, aber spätestens, wenn du z.B. diverse Funktionen aus der Windows API verwendest, kann es hier zu Problemen kommen. Die genaue Erklärung kann vllt. jemand anderes noch per Link nachreichen?  (Damn.. sollte mir solche auch mal sammeln  )
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
theevilworm 
      
Beiträge: 61
|
Verfasst: Sa 24.10.09 23:05
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin If Checkbox1.Checked Then begin edit2.Enabled:=false; end; If not checkbox1.Checked then begin edit1.enabled:=true; end; end; |
Der Code funktioniert aber gar nicht! *g*
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Sa 24.10.09 23:33
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin If Checkbox1.Checked Then begin edit2.Enabled:=false; end; If not checkbox1.Checked then begin edit1.enabled:=true; end; end; |
Siehe Highlight im Code.
Zuletzt bearbeitet von Jann1k am Sa 24.10.09 23:34, insgesamt 1-mal bearbeitet
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 24.10.09 23:33
Hallo,
was heist den "gar nicht"? keine Reaktion, falsche Reaktion, Compiler-Fehlermeldung ...
wenn das Dein Original-Code ist
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin If Checkbox1.Checked Then begin edit2.Enabled:=false; end; If not checkbox1.Checked then begin edit1.enabled:=true; end; end; |
Du veränderst die Eigenschaft unterschiedlicher Edits 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 24.10.09 23:43
Doh, das hätte mir auch auffallen müssen 
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
theevilworm 
      
Beiträge: 61
|
Verfasst: So 25.10.09 00:06
Ach, macht doch nichts
Ich stell mich ja auch doof an, hiermit zum Beispiel:
Ich habe zwei Checkboxen, nur eine von beiden kann zur Zeit aktiviert sein.
Muss ich das in diesem Fall genauso machen, mit If-Anweisungen? Warum klappt das nicht einfach so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin checkbox1.Checked:=true; checkbox2.Checked:=false; end;
procedure TForm1.CheckBox2Click(Sender: TObject); begin checkbox2.Checked:=true; checkbox1.Checked:=false; end;
end. |
Das produziert mir einen Overflow 
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 25.10.09 00:18
1. Neue Frage = neues Thema
2. Für sowas gibt es RadioButtons.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: So 25.10.09 00:20
Scheint wohl so, als würden sich die beiden checkboxen gegenseitig immer wieder aufrufen, praktisch also wieder eine Endlosschleife.
Könntest du statt der beiden Checkboxen eine TRadiogroup benutzen? Bei einer TRadiogroup kann nämlich immer nur eine Option ausgewählt werden und damit liefert sie denke ich genau das was du brauchst.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 25.10.09 12:37
Xentar hat folgendes geschrieben : | Ich hab nur leider gerade nicht die Erklärung zur Hand, warum das so ist.
Unter Delphi selber ist das erstmal nicht schlimm, aber spätestens, wenn du z.B. diverse Funktionen aus der Windows API verwendest, kann es hier zu Problemen kommen. Die genaue Erklärung kann vllt. jemand anderes noch per Link nachreichen? (Damn.. sollte mir solche auch mal sammeln ) |
Kein Problem, wofür gibts Entwürfe.
Der Vergleich mit Booleanwerten (z.B. if x = true then) ist nicht nur unlogisch, sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
www.delphi-forum.de/....php?p=548760#548760
Mehr dazu steht hier unter Anfängerfehler:
www.delphi-treff.de/...olean-werten/page/4/
Und warum das auch vollkommen unlogisch ist:
www.delphi-forum.de/....php?p=560637#560637
|
|