AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vereinfachung gesucht

Ein Thema von Die Muhkuh · begonnen am 2. Sep 2010 · letzter Beitrag vom 2. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

Vereinfachung gesucht

  Alt 2. Sep 2010, 11:14
Delphi-Version: 2005
Hi,

ich hab hier in einem Code mehrere Stellen (ca. 30 Stück), die vom Prinzip so aussehen:

Delphi-Quellcode:
if RadioButton1.Checked then
begin
  if CheckBox1.Checked then
    SQL.Add('abc')
  else
  if CheckBox2.Checked then
    SQL.Add('def')
  else
  begin
    SQL.Add('abc');
    SQL.Add('def');
  end;
end;
Hat jemand eine sinnvolle Idee, sich da die Redundanz zu sparen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 11:16
Können beide CheckBoxen gleichzeitig markiert sein?

wenn nicht:
Delphi-Quellcode:
if RadioButton1.Checked then
begin
  if not CheckBox1.Checked then SQL.Add('def');
  if not CheckBox2.Checked then SQL.Add('abc');
end;
PS:
Delphi-Quellcode:
procedure DoThis(Group: TRadioButton; Check1, Check2: TCheckBox; SQL: TIrgendwas; Add1, Add2: String);
begin
  if Group.Checked then
  begin
    if Check1.Checked then
      SQL.Add(Add1)
    else
    if Check2.Checked then
      SQL.Add(Add2)
    else
    begin
      SQL.Add(Add1);
      SQL.Add(Add2);
    end;
  end;
end;
$2B or not $2B

Geändert von himitsu ( 2. Sep 2010 um 11:21 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 11:26
mhm, oder so vielleicht?

Delphi-Quellcode:
var
 mode: Integer;
...
..
begin
 mode := 0 ;
 if CheckBox1.Checked then Inc(mode)
 else if CheckBox2.Checked then mode := mode +2 ;

 if ( (mode = 0) or (mode = 1) ) then SQL.Add('abc') ;
 if ( (mode = 0) or (mode = 2) ) then SQL.Add('def') ;
end;
alternativ auch mit zwei case:

Delphi-Quellcode:
var
 mode: Integer;
...
..
begin
 mode := 0 ;
 if CheckBox1.Checked then Inc(mode)
 else if CheckBox2.Checked then mode := mode +2 ;

 case mode of
   0,1: SQL.Add('abc') ;
 end;

 case mode of
   0,2: SQL.Add('def') ;
 end;
 
end;

Geändert von blackfin ( 2. Sep 2010 um 11:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 11:37
Hi,

@Fin: Interessanter Ansatz, schau ich mir gleich mal näher an.

@Frank: Nein, entweder ist keine aktiv oder nur eine davon. Deine erste Methode probier ich auch gleich mal aus.

Die Funktion fällt leider weg, da manchmal 2-3 SQL-Anweisungen kommen oder die Prüfung auf die Checkboxen entfällt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 11:38
@blackfin: wenn, dann doch eher so: (diese CASE würden es nicht grad vereinfachen)
Delphi-Quellcode:
if RadioButton1.Checked then begin
  if CheckBox1.Checked then mode := 1
  else if CheckBox2.Checked then mode := 2 else mode := 0;
  if mode in [0, 1] then SQL.Add('abc');
  if mode in [0, 2] then SQL.Add('def');
end;

[add]
CheckBoxen optional (einfach nil übergeben) und mehrere Strings:
(kann man auch noch mit überladenen Proceduren und/oder Default-Parametern aufmotzen und mit der "mode"-Variante kombinieren)
Delphi-Quellcode:
procedure DoThis(Group: TRadioButton; Check1, Check2: TCheckBox; SQL: TIrgendwas; Add1, Add2: array of String);
var
  i: Integer;
begin
  if Group.Checked then
    if Assigned(Check1) and Check1.Checked then begin
      for i := 0 to High(Add1) do SQL.Add(Add1[i]);
    end else if Assigned(Check2) and Check2.Checked then begin
      for i := 0 to High(Add2) do SQL.Add(Add2[i]);
    end else begin
      for i := 0 to High(Add1) do SQL.Add(Add1[i]);
      for i := 0 to High(Add2) do SQL.Add(Add2[i]);
    end;
end;
[edit]
Schade, for Add1 in S do SQL.Add(S); geht nicht.
$2B or not $2B

Geändert von himitsu ( 2. Sep 2010 um 11:49 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 11:39
Stimmt, das ist noch besser
Naja, es ging ja in erster Linie um die Redundanz-Vermeidung, das tut mein Code auch, aber deiner ist noch eleganter
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 11:42
So, da Franks Lösung funktioniert, brauch ich nicht mehr weiter testen, weil es ja die einfache Lösung ist (hätte fast von mir sein können )
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 12:20
PS: Noch was zu den CheckBoxen (falls sowas nicht schon eingebaut ist).

So kann man nur eine CheckBox anklicken und vorallem sieht man auch gleich, daß die andere dann nicht mehr geht.
Delphi-Quellcode:
// ins OnClick beider CheckBoxen
procedure TForm9.CheckBox1Click(Sender: TObject);
begin
  CheckBox2.Enabled := not CheckBox1.Checked;
  CheckBox1.Enabled := not CheckBox2.Checked;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 12:25
Ich verwende die ComboBox von DevExpress, die haben das schon on Board, dass man nur eine klicken kann
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Vereinfachung gesucht

  Alt 2. Sep 2010, 13:05
Delphi-Quellcode:
// ins OnClick beider CheckBoxen
procedure TForm9.CheckBox1Click(Sender: TObject);
begin
  CheckBox2.Enabled := not CheckBox1.Checked;
  CheckBox1.Enabled := not CheckBox2.Checked;
end;
Und dann im OI beide auf Checked setzen

[edit] Nee, das bringt ja nix. Spaß macht es nur, wenn man nur eine der beiden im OI checked und die andere dann im OnShow ^^ [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 2. Sep 2010 um 13:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 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