Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Checkbox soll Editfeld deaktivieren und wieder aktivieren
theevilworm - Sa 24.10.09 22:17
Titel: Checkbox soll Editfeld deaktivieren und wieder aktivieren
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 - 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..
theevilworm - Sa 24.10.09 22:36
Dankeschön :)
Hoffentlich geh ich euch noch nicht auf den Sack nach meinen 2 Tagen hier :D
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.
Xentar - 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 ;) )
theevilworm - 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 - 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.
Lannes - 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 :wink:
Xentar - Sa 24.10.09 23:43
Doh, das hätte mir auch auffallen müssen :(
theevilworm - 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 - So 25.10.09 00:18
1. Neue Frage = neues Thema
2. Für sowas gibt es RadioButtons.
Jann1k - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!