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 Aktion entsprechend ComboBox... (https://www.delphipraxis.net/104627-aktion-entsprechend-combobox.html)

Stern 7. Dez 2007 18:39


Aktion entsprechend ComboBox...
 
Hallo,

ich habe eine ComboBox, die über eine php-Datei gefüllt wird. Soweit funktioniert das auch.
Nun würde ich noch gerne eine Möglichkeit haben, in Abhängigkeit des ausgewählten Items eine bestimmte aktion auszuführen.

Bislang hätte ich das so gemacht:
Delphi-Quellcode:
if ComboBox1.Text = 'aktion1' then
        qrMain.SQL.Clear;
        qrMain.SQL.Text:= 'SELECT blablabla;';
        qrMain.Active:= True;
        qrMain.open;
Nun habe ich allerdings das Problem, dass die ComboBox sehr umfangreich geworden ist. Mit den If-Abfragen komm ich da natürlich
nicht weit, da so in jedem Fall nur die letzte Aktion der ComboBox ausgeführt wird. Warum die IF-Abfrage übergangen wird, weiß ich nicht.
Wie könnte man noch abfragen, welches item ausgewählt wurde?

Liebe Grüße
Steffi

DeddyH 7. Dez 2007 18:40

Re: Aktion entsprechend ComboBox...
 
Über den ItemIndex evtl.?

Stern 7. Dez 2007 18:45

Re: Aktion entsprechend ComboBox...
 
Ok, bei 25 Items dann am besten über eine case-Abfrage?
Entschuldigt bitte diese dummen Fragen, aber ich bin noch ziemlich neu und nicht so wirklich firm, was hier am schnellsten von der performance
her wäre... :oops:

Liebe Grüße
Steffi

DeddyH 7. Dez 2007 18:46

Re: Aktion entsprechend ComboBox...
 
Haargenau.
Delphi-Quellcode:
case ComboBox.ItemIndex of
  0: Machwas;
  1: MachwasAnderes;
  ...
end;

marabu 7. Dez 2007 19:01

Re: Aktion entsprechend ComboBox...
 
Hallo Steffi,

der IF-Abfrage folgt ein einzelnes Statement, da du den BEGIN-END-Block vergessen hast. Grundsätzlich sollte der Wechsel des Items in einer ComboBox keine Aktion auslösen, die einen spürbaren Zeitverbrauch mit sich bringt.

Grüße vom marabu

DeddyH 7. Dez 2007 19:04

Re: Aktion entsprechend ComboBox...
 
Hi marabu,

so gut gemeint und richtig Dein Rat auch ist, ich habe nirgends lesen können, dass sie direkt im OnChange-Ereignis eine Aktion auslösen möchte.

Die Muhkuh 7. Dez 2007 19:05

Re: Aktion entsprechend ComboBox...
 
Zitat:

Zitat von DeddyH
Hi marabu,

so gut gemeint und richtig Dein Rat auch ist, ich habe nirgends lesen können, dass sie direkt im OnChange-Ereignis eine Aktion auslösen möchte.

Ich denke mal, dass marabu drauf hinweisen wollte, Detlef. Weil aus Steffis Beschreibung etwas derartiges beschreibt. ;-)

Stern 7. Dez 2007 19:05

Re: Aktion entsprechend ComboBox...
 
Kann ich bei in Delphi bei der Case-Abfrage immer nur eine Aktion pro item durchführen?
Also:
Delphi-Quellcode:
case ComboBox.ItemIndex of
  0: eineAktion;
  1: eineAktion;
  ...
end;
Was mache ich dann, wenn ich aber soetwas brauche?
Delphi-Quellcode:
case ComboBox1.ItemIndex of
      0:qrMain.SQL.Clear;
        qrMain.SQL.Text:= 'SELECT blabla1;';
        qrMain.Active:= True;
        qrMain.open;
        brake;
      1:qrMain.SQL.Clear;
        qrMain.SQL.Text:= 'SELECT blabla2;';
        qrMain.ParamByName('jahr').asString := Jahr;
        qrMain.Active:= True;
        qrMain.open;
Letzte Doofi-Frage für heute... :oops:

Liebe Grüße
Steffi

Die Muhkuh 7. Dez 2007 19:09

Re: Aktion entsprechend ComboBox...
 
Hi Steffi,

nein, Du kannst natürlich auch mehr ausführen:

Delphi-Quellcode:
case ComboBox1.ItemIndex of
      0:
        begin
         { Dein Code } 
        end;
      1:
        begin
         { Dein Code } 
        end;
...

DeddyH 7. Dez 2007 19:09

Re: Aktion entsprechend ComboBox...
 
Delphi-Quellcode:
case ComboBox.ItemIndex of
  0: begin
       eineAktion;
       nochneAktion;
     end;
  1: begin
       eineAktion;
       nochneAktion;
     end;
  ...
end;
[edit] Die Kuh war schneller :mrgreen: [/edit]

Die Muhkuh 7. Dez 2007 19:10

Re: Aktion entsprechend ComboBox...
 
Zitat:

Zitat von DeddyH
[edit] Die Kuh war schneller :mrgreen: [/edit]

Ich bin ja auch noch ein bisschen jünger als Du. :mrgreen:

DeddyH 7. Dez 2007 19:11

Re: Aktion entsprechend ComboBox...
 
[OT] That' s right :lol: [/OT]

freak4fun 7. Dez 2007 19:12

Re: Aktion entsprechend ComboBox...
 
Delphi-Quellcode:
if ComboBox1.Text = 'aktion1' then
  with qrMain do
    begin
      SQL.Clear;
      SQL.Text:= 'SELECT blablabla;';
      Active:= True;
      open;
   end;
Das with ... do ersetzt das qrMain vor jeder Anweisung, ersparrt somit Schreibarbeit.
Das begin ... end bewirkt, das alles Ausgeführt wird und nicht nur eine Zeile.

Ich hoffe das hilft dir weiter. ;)

MfG
freak

Stern 7. Dez 2007 19:13

Re: Aktion entsprechend ComboBox...
 
Ich wurde noch nie sooo nett mit Ratschlägen überhäuft wie in diesem Forum... :thumb:

Vielen, vielen lieben Dank.
Liebe Grüße
Steffi

Sharky 8. Dez 2007 08:15

Re: Aktion entsprechend ComboBox...
 
Hai Steffi,

ich habe noch eine Anmerkung zu deinem Code.
Du solltest versuchen in dem Caseblock keinen redundanten Code verwenden. Zum eines sparst Du einige Zeilen und zum anderen wird der Code übersichtlicher.

Delphi-Quellcode:
begin
  qrMain.Close;
  qrMail.SQL.Clear; // Wenn sichergestellt ist das immer ein SQL.Text := kommt muss man das Statment nicht vorher löschen.
  case ComboBox1.ItemIndex of
      0: qrMain.SQL.Text := 'SELECT blabla1;';
      1: begin
          qrMain.SQL.Text := 'SELECT blabla2;';
          qrMain.ParamByName('jahr').asString := Jahr;
         end;
  end;
  if (qrMain.SQL.Text <> '') then // und kann sich dann auch diese Abfrage sparen.
  begin
    qrMain.Open;
  end;

Die Muhkuh 8. Dez 2007 08:47

Re: Aktion entsprechend ComboBox...
 
Hi,

gute Idee Stephan, wobei man aber vielleicht noch einen zusätzlichen Boolean einbaut, mit dem man wahlweise die Anweisung .Open oder .Execute aufruft, falls vielleicht doch ein UPDATE- oder DELETE-Statement auftaucht.


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

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