"Identischen Code" vereinfachen



  • Hallo
    Ich habe in einem Programm den folgenden Quellcode. Ein paar weitere sehr ähnliche Zeilen haben ich in den if-Anweisungen weggelassen.

    if (ImageNr==1)
      {
      Img1->Show();
      Img1->Transparent=false;
      Img1->Picture->Bitmap->LoadFromResourceID((int)HInstance, ID_IMG1);
      }
    if (ImageNr==2)
      {
      Img2->Show();
      Img2->Transparent=false;
      Img2->Picture->Bitmap->LoadFromResourceID((int)HInstance, ID_IMG2);
      }
    :
    :
    if (ImageNr==8)
      {
      Img8->Show();
      Img8->Transparent=false;
      Img8->Picture->Bitmap->LoadFromResourceID((int)HInstance, ID_IMG8);
      }
    

    Lässt sich das irgendwie vereinfachen?
    Mit anderen Worten kann man ImgX durch irgendwie aus "Img" und ImageNr zusammensetzen?
    Falls ja geht das auch mit der Resource-ID ID_IMGX?

    Vielen dank!



  • Kenne mich mit dem C++-Builder nicht aus, evtl kann ich dir aber mit "normalem "C++ weiterhelfen 😉

    Ich sehe mehrere Lösungsansätze, alle laufen aber auf Arrays bzw Container hinaus. Das Einfachste wäre, wenn sich die Variablen "Img1" bis "Img8" in einem einzigen Array zusammenfassen lassen und "ID_IMG1" bis "ID_IMG8" fortlaufende Zahlen sind. Falls dem so sein sollte:

    WasAuchImmerFuerEineKlasse* Imgs[8];
    
    ...
    
    // Arrays fangen mit Index 0 an
    WasAuchImmerFuerEineKlasse* img = Imgs[ImageNr-1];
    
    img->Show();
    img->Transparent = false;
    img->Picture->Bitmap->LoadFromResourceID((int)HInstance, ID_IMG1 + ImageNr-1 );
    

    Aufgesetzt (also ohne außerhalb der Funktion was zu verändern) könnte aber auch Folgendes funktionieren:

    WasAuchImmerFuerEineKlasse* imgs[8] = { Img1, Img2, Img3, ... Img8 };
    int ids[8] = { ID_IMG1, ... ID_IMG8 };
    
    WasAuchImmerFuerEineKlasse* img = imgs[ImageNr-1];
    int id = ids[ImageNr-1];
    
    img->Show();
    img->Transparent = false;
    img->Picture->Bitmap->LoadFromResourceID((int)HInstance, id );
    

    Falls dir Arrays unbekannt sind, sollte dir jedes beliebige C++-Tutorial aushelfen 🙂




Anmelden zum Antworten