Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Abhängigkeit 2er DBCheckboxen (https://www.delphipraxis.net/81260-abhaengigkeit-2er-dbcheckboxen.html)

needatip 23. Nov 2006 16:43


Abhängigkeit 2er DBCheckboxen
 
Hallo,
ich möchte 2 DBCheckboxen voneinander abhängig anzeigen und die Werte anpassen.

Grundvorraussetung ist dass wenn cb1.Checked true ist, dann darf die 2. DBCheckBox cb2 nicht sichtbar sein.
Delphi-Quellcode:
procedure TFORM1.cb1Click(Sender: TObject);
begin
  if cb1.Checked = true then cb2.Visible = true
     else cb2.Visible = false;
end;
Jetzt möchte ich noch, dass wenn man auf cb1 klickt, nicht nur die cb2 nicht angezeigt wird, sondern dass dann auch
cb2 auf unchecked gesetzt wird.

Bitte um Hilfe.

shmia 23. Nov 2006 17:04

Re: Abhängigkeit 2er DBCheckboxen
 
Delphi-Quellcode:
procedure TFORM1.cb1Click(Sender: TObject);
begin
   cb2.Visible := not cb1.Checked;
   cb2.checked := false;
end;

needatip 23. Nov 2006 17:21

Re: Abhängigkeit 2er DBCheckboxen
 
Sorry hab das falsch interpretiert.
Grundvorraussetung ist dass wenn cb1.Checked false ist, dann darf die 2. DBCheckBox cb2 nicht sichtbar sein.
Also muss ich doch schreiben:

Delphi-Quellcode:
procedure TFORM1.cb1Click(Sender: TObject);
begin
   cb2.Visible := cb1.Checked;
   cb2.checked := false;
end;
Wenn dann bei beiden Checked = true ist, und dann das nächste mal draufklicke ist nur cb1.checked false.
Es sollen dann aber beide Checkboxen false sein !

raiguen 24. Nov 2006 09:30

Re: Abhängigkeit 2er DBCheckboxen
 
Moin :-)
[quote="needatip"]
Grundvorraussetung ist dass wenn cb1.Checked false ist, dann darf die 2. DBCheckBox cb2 nicht sichtbar sein. [/qoute]

Zitat:

Zitat von shmia
Delphi-Quellcode:
procedure TFORM1.cb1Click(Sender: TObject);
begin
   cb2.Visible := not cb1.Checked;
end;

Genau das ist es: :!:

Zitat:

Zitat von needatip
Wenn dann bei beiden Checked = true ist, und dann das nächste mal draufklicke ist nur cb1.checked false.
Es sollen dann aber beide Checkboxen false sein !

Also beide Checkboxen sollen den gleichen Status haben?Das interpretiere ich dich richtig? Na, dann mach's halt so:
Delphi-Quellcode:
procedure TFORM1.cb1Click(Sender: TObject);
begin
   cb2.Visible := not cb1.Checked;
   cb2.Checked := cb1.Checked;
end;

needatip 24. Nov 2006 10:19

Re: Abhängigkeit 2er DBCheckboxen
 
Vielleicht hab ich vergessen zu erwähnen:
wenn cb1.checked = false ist dann soll cb2.visible = false und cb2.checked = false sein.

Sharky 24. Nov 2006 10:31

Re: Abhängigkeit 2er DBCheckboxen
 
Hai,

nur eine kleine Anmerkung:

Wenn Du für eine CheckBox eine "OnClick"-Ereigniss hast wird dieses auch dann aufgerufen wenn die Eigenschaft Checked geändert wird und nicht nur wenn man mit der Maus auf die CB klickt.

Dieser Code hier erzeugt also eine schöne Rekursion:
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  CheckBox1.Checked := not(CheckBox1.Checked)
end;

needatip 24. Nov 2006 10:42

Re: Abhängigkeit 2er DBCheckboxen
 
Ok hab ich verstanden.
Wie hol ich nun die Kuh vom Eis?
Meine Aufgabe ist folgende:
ich habe zwei DBCheckboxen, eine für das Feld Export und eine für das Feld Drittland.
Wenn nun beim Feld Export ein Häkchen gesetzt wird soll die Checkbox Drittland sichtbar werden.
Jetzt kann man auch für DBCheckbox Drittland ein Häkchen setzen oder eben nicht.
Wenn aber später das Häkchen bei Export herausgenommen wird, soll auch das Häkchen bei Drittland herausgenommen werden und
eben die Checkbox Drittland unsichtbar werden.
Sorry, ich hoffe mich nun etwas klarer ausgedrückt zu haben.

raiguen 24. Nov 2006 12:19

Re: Abhängigkeit 2er DBCheckboxen
 
Zitat:

Zitat von needatip
...
Sorry, ich hoffe mich nun etwas klarer ausgedrückt zu haben.

Und ich hoffe, das nun richtig verstanden zu haben:
Delphi-Quellcode:
procedure cb1Click(Sender: TObject);
begin
  cb2.Visible := cb1.checked;
  cb2.checked := (cb1.checked and not cb2.Visible);
//--bzw vereinfacht:
  cb2.Checked := false;
end;

marabu 24. Nov 2006 12:28

Re: Abhängigkeit 2er DBCheckboxen
 
Hallo needatip,

auch GUI-Design kennt gewisse Best Practices. Dazu gehört, dass man die zweite CheckBox nicht unsichtbar macht, sondern lediglich disabled. Unsichtbar macht nur dann Sinn, wenn der vom Control eingenommene Raum anderweitig genutzt werden kann.

Und wenn du datensensitive Controls (DBCheckBox) einsetzt, dann manipuliert der Benutzer diese Controls, dein Code aber manipuliert die Feldwerte des Datensatzes direkt.

Delphi-Quellcode:
procedure TDemoForm.CBExportClicked(Sender: TObject);
begin
  with Table do
    if (State = dsEdit) or (State = dsInsert) then
    begin
      FieldByName('DRITTLAND').AsBoolean := False;
      CBDrittLand.Enabled := CBExport.Checked;
    end;
end;

procedure TDemoForm.DataSourceDataChange(Sender: TObject; Field: TField);
begin
  if not Assigned(Field) then
    CBDrittLand.Enabled := CBExport.Checked;
end;
Freundliche Grüße

needatip 24. Nov 2006 17:12

Re: Abhängigkeit 2er DBCheckboxen
 
Bin für jeden Ratschlag dankbar. - Alles super !
Beste Grüsse.
:cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz