Autor Beitrag
theevilworm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 24.10.09 22:32 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



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


Zuletzt bearbeitet von theevilworm am Sa 24.10.09 22:44, insgesamt 1-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 24.10.09 22:43 
Jo, genau. Bei deinem Quellcode wäre es
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: Sa 24.10.09 23:05 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Sa 24.10.09 23:33 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 24.10.09 23:33 
Hallo,

was heist den "gar nicht"? keine Reaktion, falsche Reaktion, Compiler-Fehlermeldung ...


wenn das Dein Original-Code ist
ausblenden 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:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 24.10.09 23:43 
Doh, das hätte mir auch auffallen müssen :(

_________________
PROGRAMMER: A device for converting coffee into software.
theevilworm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.10.09 12:37 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
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. :mrgreen:

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