Array of Buttons?



  • Kann mir bitte jemand die Syntax verraten, wie ich 20x10 Button erzeugen kann und sie in ein Array packen kann, sodass ich sie in einer Schleife ansprechen kann???

    BITTE



  • Ich hatte das mal, nur ich weis nicht ob dass das gelbe vom Ei ist:

    Mein Syntax hieß:

    private: static Button* testBT[] = new Button*[16]; //<--- Buttons...
    
    // In einer Methode werden die Objekte erzeugt
    
    			for(Int32 i=0;i<10;i++)
    			{
    				testBT[i] = new Button;
    				testBT[i]->Location = System::Drawing::Point(50+i*20, 50+i*20);
    				this->Controls->Add(this->testBT[i]);
    				testBT[i]->Text = Convert::ToString(i);
    //...
    


  • danke, ich werds sofort ausprobieren 👍



  • error C3699: "*": Diese Referenzierung kann nicht für den Typ "System::Windows::Forms::Button" verwendet werden.

    error C2728: "System::Windows::Forms::Button ^": Ein systemeigenes Array kann diesen verwalteten Typ nicht enthalten.

    error C4368: "testBT" kann nicht als Member von "button::Form1" (verwaltet) definiert werden: Gemischte Typen werden nicht unterstützt.

    😕 ... hatte ich schon gesagt, dass ich es auf Noobisch haben will 🙄



  • Anstelle von Button* musst Du Button^ verwenden.
    Button (so wie hier verwendet) ist ein managed Typ, desshalb auch managed pointer verwenden.

    @Basman
    Schätze mal das dein Code schon ein weniga alt ist... sieht nämlich na Managed C++ aus... nicht C++/CLI.

    Simon



  • Ja Mein Code ist noch aus VisualStudio 2003, in 2005 muss man statt *, ^ verwenden



  • Dann füge ich hier mal meine Lösung des Problems ein und hoffe das es eine C++/CLI lösung ist, da ich es auch gerade lerne^^ (sonst bitte sagen!)

    Int32 x = 0; //Anfangsposition im Formular "links"
    				 Int32 y = 12; //Anfangsposition im Formular "oben"
    
    				 //Array mit 20x10 Elementen vom Typ Button
    				 array <Button^,2> ^feld = gcnew array <Button^,2>(20,10);
    
    				 for(Int32 ia = 0; ia < 20; ++ia){ //ia ist die schleife außen
    					  //Die Schleife läuft 10 mal
    						for(Int32 i=0;i<10;++i) //i ist die schleife innen
    						{
    							feld[ia,i] = gcnew Button; //dem aktuellen Feldindex wird ein neuer Button zugewiesen
    							feld[ia,i]->Location = System::Drawing::Point(x += 25, y); //dem neuen Button wird die Position "mitgeteilt"
    							feld[ia,i]->Size = System::Drawing::Size::Size(25,25); //Größe wird auf 25*25 Pixel festgelegt
    							this->Controls->Add(feld[ia,i]); //Einfügen des Buttons auf das Formular
    							feld[ia,i]->Text = Convert::ToString(i); //Setzte Text des Buttons auf den entsprechenden Indexwert
    						}
    						x = 0; //Setzt die "Start"-Position immer wieder fest
    						y += 25; //Hier wir die ebene nach unten neu festgelegt
    				 }
    

    So sieht es dann nach dem die Buttons erzeugt wurden aus: Hier das screenshot



  • Danke.... Danke.... Danke......

    ich habe kopiert und es funktioniert.
    Du kannst nicht erahnen... wieviel du mir geholfen hast!
    Ich sitze an dem Problem jetzt volle 20h an meinem scheiß PC und bin kein Stück weiter gekommen........

    Das letzte Mal habe ich mich so gefreut, als ich wusste dass ich mein Abi geschafft habe.

    Danke.... kann ich dir irgendwas gutes tun? Hast du vielleicht einen Lieblingswein oder so, den ich dir schicken kann.

    Du hast ja keine Ahnung wie dankbar ich bin, dass ich jetzt endlich weiter kommen 👍 👍 👍

    Vielen Dank auch an das Forum

    Na iist den heut´scho Weihnachnen :xmas1:



  • Gern geschehen.... 🙂

    Gruß
    Rudolf Grauberger

    PS: Vielen Dank für das Angebot mit dem Wein aber ich trinke kein Wein 😉 (nein ich brauche nix)



  • danke nochmal für den Tipps mit den buttons.... ich habe jetzt alles auf meine Aufgabe umgemünzt. Leider weiß ich nicht, wie jetzt die Funktion geschrieben werden muss, die das Clicken verwaltet.

    Ich probiers zwar gerade selber, aber irgendiwe funktioniert es nicht.

    Es muss doch möglich sein, wenn einer der Button geklickt wird, dass er seine Koordinaten im Array an eine Funktion sendet, die dann mit den Werten rechnet.

    Also ich weiß z.B auch nicht wie das Event funktioniert, dass das Programm wartet bis ein Button geklickt wird.



  • L4ngweiler schrieb:

    Ich probiers zwar gerade selber, aber irgendiwe funktioniert es nicht.

    Es muss doch möglich sein, wenn einer der Button geklickt wird, dass er seine Koordinaten im Array an eine Funktion sendet, die dann mit den Werten rechnet.

    Also wie ich jetzt an das Click_Ereignis der Buttons komme weiß ich ehrlich gesagt selber nicht aber wenn jemand das hier weiß und es postet dann solltest du folgendes in den Ereignissen machen:

    die Funktion aufrufen (der du die Kordinaten übergeben willst) und die Eigenschaften Location (x,y) der Funktion zu übergeben.

    Die Berechnungen sollte dabei die Funktion erledigen

    L4ngweiler schrieb:

    Also ich weiß z.B auch nicht wie das Event funktioniert, dass das Programm wartet bis ein Button geklickt wird.

    Wenn du mit Visual C++ 2005 Express arbeitest und mit Windows Forms dann füge einfach die Buttons ein. Das Programm wird nichts machen bis man ein Button angeklickt hat (und das auch nur wenn man dahinter eine Anweisung hat).

    Gruß
    Rudolf Grauberger


Anmelden zum Antworten