Komponenten während der Laufzeit erzeugen



  • Einfach

    TextBox tb = gwnew TextBox();
    // setze hier noch die Properties die Du willst (Name, Size, Location, usw.)
    this.Controls.Add(tb);
    

    Und wie schon gesagt wurde: Schau Dir mal an was in "InitializeComponents" gemacht wird, dann kannst Du es dort abschauen...



  • ich habs jetz eine procedure geschrieben, die eine Textbox erstellt:

    void addtb() {				 
    				 this->SuspendLayout();
    				 TextBox^ tb = gcnew TextBox;
    				 tb->Location = Point(10,10);
    				 tb->Size = System::Drawing::Size( 75, 25 );				
    				 this->Controls->Add(tb);
    				 this->ResumeLayout();
       }
    

    Jetzt hab ich versucht ein 2-dimensionales array vom typ Button zu machen, weil es das um einiges erleichtern würde die vielen Boxen dann zu managen.
    mit TextBox^ tbm[10][10] gehts nicht. Warum nicht?? Wie kann ich das machen??

    Danke



  • array<TextBox^,2> ^twoDimArray = gcnew array<TextBox^,2>(10, 10);
    


  • ok, aber warum muss ich das array in diesem fall so definieren??
    und wie kann ich auf die einzelnen elemete zugreifen??



  • ok, aber warum muss ich das array in diesem fall so definieren??

    warum funktioniert

    tbm[2][2]->Location = Point(10,10);
    

    nicht?? tbm ist der name des arrays

    Danke!



  • Das würde mich auch mal interessieren!



  • Ich habs noch immer nicht geschaft 😞

    array<TextBox^,2> ^twoDimArray = gcnew array<TextBox^,2>(10, 10);
    

    in diesem array stehen dan die handels der Textboxen oder??
    wie kann ich dann die Eigenschaften der Einzelnen Textboxen verändern??

    Danke



  • Also, hier ein Beispiel:

    private: 
    System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
      if (twoDimArray == nullptr)
        twoDimArray = gcnew array<TextBox^,2>(10, 10);
      twoDimArray[0,0] = gcnew TextBox();
      twoDimArray[0,0]->Name = "1";
      twoDimArray[0,0]->Location = System::Drawing::Point(100, 100);
      twoDimArray[0,0]->Size = System::Drawing::Size(300, 22);
      this->Controls->Add(twoDimArray[0,0]);
    }
    
    // das folgende ist eine "Member-Variable":
    array<TextBox^,2> ^twoDimArray;
    

    Wenn Du das Array anlegst, sind da noch keine TextBoxen drin! Du hast nur den Speicherbereich für das array angelegt. Die Textboxen musst Du jetzt noch separat anlegen (ich habe in dem Beispiel nur eine reingetan).

    Hoffe das hilft Dir weiter...

    PS: Kann das mal jemand nach C++/CLI verschieben???



  • Danke, jetzt habs ichs hinbekommen! 🙂
    Aber noch ein kleines Problem...

    tbm[i,j]->Font->Size = 40;
    

    warum funktioniert das nicht?? Was muss ich machen um die schriftgöße zu ändern??

    Danke



  • Das Font-Objekt kannst Du nicht ändern! Du musst ein neues erzeugen und dann dort die alten Werte vom existierenden Übernehmen und die gewünschetn anpassen.
    Mach es doch mal im Designer und schau Dir den COde in "InitializeComponents" an...


Anmelden zum Antworten