Komponenten durchlaufen



  • Hallo,

    ich will alle Komponenten meiner Form durchlaufen und dann neue Left-Positionen zuweisen (alle außer die mit einem Kürzel beginnen).

    Ich hatte das mal mit Farben gemacht. Jetzt brauch ich aber mehr Komponenten und die Frage ist ob ich alle entsprechend aufführen muss, also TCheckBox*, TPanel* usw. oder ob das auch einfacher geht.

    for(int i=0; i < frmMain->ComponentCount; i++)
       {
    	  TEdit* edit = dynamic_cast<TEdit*>(frmMain->Components[i]);
    	  if (edit)
    	  {
    		 edit->Color = ColorDialog1->Color;
    	  }
    	  TMemo* memo = dynamic_cast<TMemo*>(frmMain->Components[i]);
    	  if (memo)
    	  {
    		 memo->Color = ColorDialog1->Color;
    	  }
    	  TComboBox* cbo = dynamic_cast<TComboBox*>(frmMain->Components[i]);
    	  if (cbo)
    	  {
    		 cbo->Color = ColorDialog1->Color;
    	  }
    
    	  TListBox* lst = dynamic_cast<TListBox*>(frmMain->Components[i]);
    	  if (lst)
    	  {
    		 lst->Color = ColorDialog1->Color;
    	  }
    
    	  TStringGrid* str = dynamic_cast<TStringGrid*>(frmMain->Components[i]);
    	  if (str)
    	  {
    		 str->Color = ColorDialog1->Color;
    	  }
       }
    


  • Hallo,

    bei Left, Top etc. reicht es, wenn du auf "TControl" castest:

    for(int i=0; i < frmMain->ComponentCount; i++)
    {
        TControl* control = dynamic_cast<TControl*>(frmMain->Components[i]);
        if (control)
        {
            control->Left = control->Left + 10;
        }
    }
    

    Und für "alle außer die mit einem Kürzel beginnen", vergleiche einfach die Eigenschaft "Name" mit dem Kürzel (z.B. mittels Substring()).



  • Letztendlich ist aus meiner Sicht bei sowas der beste Weg, dass man die Hilfe konsultiert und herausfindet, welche Klasse das entsprechende Property ( in dem Fall "Left" ) deklariert/implementiert und dann in eben diese Klasse beim Durchlaufen castet.

    Im Prinzip so, wie Th69 es gemacht hat. In dem Fall geht er davon aus, dass TControl das Left-Property enthält. Könnte auch TWinControl sein. Ich bin mir nicht genau sicher, aber ich vertraue da einfach mal auf Th69 😃




Anmelden zum Antworten