VC++ Forms dynamisch erstellen

Dieses Thema VC++ Forms dynamisch erstellen im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von leitman, 19. Juli 2006.

Thema: VC++ Forms dynamisch erstellen Hallo alle zusammen! Ich habe ein Problem, und zwar habe ich ein Control erstellt, das bestimmte Dinge anzeigt und...

  1. Hallo alle zusammen!

    Ich habe ein Problem, und zwar habe ich ein Control erstellt, das bestimmte Dinge anzeigt und einen Button besitzt, über den sich die Eigenschaften des Controls ändern lassen.

    Nun möchte ich dieses Control in eine Windows Form Applikation (in VC++) einbinden.
    Mein Problem jetzt ist, dass es möglich sein soll, eine Unterschiedliche Anzahl von Controls darzustellen, jedoch weiß ich nicht im Vorhinein (also beim Programmstart) wieviele Controls erstellt werden sollen.

    Wenn ich sie dynamisch erstelle, kann ich ja nicht darauf zugreifen, oder?
    gibt es da die Möglichkeit eine Liste zu verwenden?
    oder wie kann ich das sonst lösen?

    steh vollkommen im Dunkeln, würde mich über jede Hilfe freuen

    mfG
    Michael
     
  2. Falls ich das richtig verstehe (es handelt sich doch um ein->Managed Control'?): Die Controls werden ja alle ohnehin quasi dynamisch erzeugt. Der Designer schreibt bloß den entsprechenden Code für Dich (im Header der Form). Beispiel Button:

    Code:
    System::Windows::Forms::Button^ btnMachwas;
    	  
    btnMachwas = (gcnew System::Windows::Forms::Button());
    	  
    btnMachwas->Location = System::Drawing::Point(110, 150);
    btnMachwas->Name = LbtnMachwas;
    btnMachwas->Size = System::Drawing::Size(75, 23);
    btnMachwas->TabIndex = 0;
    btnMachwas->Text = LMachwas;
    btnMachwas->UseVisualStyleBackColor = true;		
    btnMachwas->Click += gcnew System::EventHandler(this, &Form1::btnMachwas_Click);
    this->Controls->Add(btnMachwas);
    
    ...
    
    private: System::Void btnMachwas_Click(System::Object^  sender, System::EventArgs^  e) {
      Windows::Forms::MessageBox::Show(Hallo);
    }
    
    Du kannst also beliebige Controls erzeugen und in Control-Container (z.B. eine Form) setzen: jeweils DeinContainer->Controls->Add(DeinControl) aufrufen. Die Event-Handler musst Du dann natürlich selbst verdrahten. Wenn Du mehrere Deiner Controls brauchst - wie Du ja schreibst -, könntest Du eine passende Collection (Liste o.ä.) verwenden und die Controls in einer Schleife erzeugen. Bei vielen Controls ist es u.U. sinnvoll, vor/nach dieser Schleife SuspendLayout/ResumeLayout zu verwenden.
     
  3. Danke erstmal,
    hab eine Schleife, in der die Controls erstellt werden, funktioniert super  ;D

    Genau davor stehe ich jetzt, da es ja CustomControls sind, die ich selber erstellt habe, weiß ich nicht, wo ich sie abspeichern kann! Habs bereits mit ArrayList probiert, aber das ist nicht ganz das Wahre...
    Gibts da etwas besseres?
    oder wie kann ich selber solche Listenklassen oder Collections erstellen?

    Vielen Dank nochmals
    mfG

    Leitman
     
  4. Warum? Na ja, die nötigen Casts sind nicht so schön. Aber funktionieren sollte es.

    Ja, in VS 2005 generische Collections (wie List<T>). Typsicher und praktisch. Weitere Möglichkeiten s.u.

    Z.B. durch Ableiten von ArrayList, List<T> etc. (hat aber jeweils Nachteile, da die Klassen schon sehr spezialisiert sind und Du auch nicht alle Methoden überschreiben kannst), durch Ableiten von CollectionBase (http://msdn.microsoft.com/library/d...systemcollectionscollectionbaseclasstopic.asp). Oder durch Implementieren von ICollection, IList, ..., aber dann musst Du natürlich eine entsprechende Datenstruktur in dieser Klasse haben (einfaches Array, Liste, ...), wodurch sich in Deinem Fall wahrscheinlich die Katze in den Schwanz beißt, sozusagen.

    Eine eigene Klasse wäre sinnvoll, wenn Du mit Deiner Collection mehr anfangen willst, als bloß die Controls zu speichern. Sprich, wenn Du spezielle Operationen auf alle oder auf einen Teil der Controls anwenden willst und dies nicht von außen über Schleifen oder Generics und Delegates mit den dafür vorgesehenen Methoden (ForEach, Find, FindAll, TrueForAll, RemoveAll, ...) machen willst.

    Der Vollständigkeit halber:
    Außer den Klassen in System::Collections, System.Collections.Specialized, System::Collections::ObjectModel (sinnfreier Name) und System::Collections::Generic gäbe es als Alternative z.B. noch die STL (STL/CLI) und die Power Collections (http://www.wintellect.com/, Anmeldung erforderlich)
     
Die Seite wird geladen...

VC++ Forms dynamisch erstellen - Ähnliche Themen

Forum Datum
Vista startet nicht nach VC++ install Windows Vista Forum 30. Apr. 2010
[VC++] TabControl SizeMode Webentwicklung, Hosting & Programmierung 24. Juli 2006
VC++ MSChart (Kreisdiagramm); Webentwicklung, Hosting & Programmierung 14. Apr. 2006
Zeitberechnungen unter VC++ Windows XP Forum 23. Aug. 2005
Systeminfos mit VC++ Windows XP Forum 20. Aug. 2005