Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi schleife für radiogroup-controls (https://www.delphipraxis.net/10767-schleife-fuer-radiogroup-controls.html)

LoL 24. Okt 2003 19:53


schleife für radiogroup-controls
 
hallo zusammen

ich habe folgendes problem:
da ich meinen code sehr kurz halten will, möchte ich eine prozedur für mehrere ereignisse haben. diese sollte folgendes machen:
ich habe mehrere radiogroup´s mit unterschiedlicher item-anzahl, beispielsweise eine mit 3 mit 4 und 5 items.
nun will ich je nachdem welches item ausgewählt wurde die anderen items der radiogroup deaktivieren. das ist ja auch nicht so schwer->
Delphi-Quellcode:
case radiogroup.ItemIndex of
  0 : for i := 1 to radiogroup.Items.Count - 1 do
        radiogroup.Controls[i].Enabled := false;
  1 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 1) then
          radiogroup.Controls[i].Enabled := false;
  2 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 2) then
          radiogroup.Controls[i].Enabled := false;
  3 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 3) then
          radiogroup.Controls[i].Enabled := false;
  4 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 4) then
          radiogroup.Controls[i].Enabled := false;
  end;
nun meine frage:
kann ich eine case abfrage für alle radiogroups schreiben?
quasi so->
Delphi-Quellcode:
case radiogroup.ItemIndex of
  0 : for i := 1 to radiogroup.Items.Count - 1 do
        radiogroup.Controls[i].Enabled := false;
  1 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 1) then
          radiogroup.Controls[i].Enabled := false;
  2 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 2) then
          radiogroup.Controls[i].Enabled := false;
  3 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 3) then
          radiogroup.Controls[i].Enabled := false;
  4 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 4) then
          radiogroup.Controls[i].Enabled := false;
  if radiogroup.Items.Count = 6 then
  5 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 5) then
          radiogroup.Controls[i].Enabled := false;
  if radiogroup.Items.Count = 7 then
  6 : for i := 0 to radiogroup.Items.Count - 1 do
        if not(i = 6) then
          radiogroup.Controls[i].Enabled := false;
  end;
ich weis das das nicht funzt aber so hab ich mir das gedacht

Christian Seehase 24. Okt 2003 20:24

Re: schleife für radiogroup-controls
 
Moin Christoph,

warum sollte das nicht so gehen, besser gesagt, geht noch kürzer:
(zumindest wenn ItemIndex immer dem case Label entspricht)

Delphi-Quellcode:
  for i := 0 to radiogroup.Items.Count - 1 do begin
    if i <> radiogroup.ItemIndex) then begin
      radiogroup.Controls[i].Enabled := false;
    end;
  end;
Du kannst ja eine TRadioGroup auch als Parameter übergeben.

APP 24. Okt 2003 20:24

Re: schleife für radiogroup-controls
 
Hallo Christoph,
mal so richig Q&D:

Delphi-Quellcode:
PROCEDURE TForm1.Button2Click(Sender: TObject);
   PROCEDURE DisableRGItems(comp: TComponent; rg: TRadioGroup);
   VAR
      k, i                        : integer;
      a                           : Tcomponent;
   BEGIN
      FOR k := 0 TO comp.ComponentCount - 1 DO
         BEGIN
            a := comp.components[k];
            IF a.classType = TRadioGroup THEN
               WITH (a AS TRadioGroup) DO
                  IF rg.Name = a.Name THEN
                     FOR i := 0 TO Items.Count - 1 DO
                        IF ItemIndex <> i THEN
                           Controls[i].Enabled := false;
         END;
   END;
BEGIN
   // 1. Parameter ist die Form, 2. Die Radiogroup
   DisableRGItems(self, RadioGroup1);
END;
p.s. Wenn kein Item angewählt ist, werden alle Disabled

LoL 24. Okt 2003 20:37

Re: schleife für radiogroup-controls
 
thx@all, funzt

ps: warum einfach wenns auch umständlich geht :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:29 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-2025 by Thomas Breitkreuz