Objekte aus mehreren Teilen automatisch erstellen



  • Moin moin, ich habe Probleme folgendes Gedankenkonstrukt in die Tat umzusetzen:

    Auf einem Spielplan sollen auf festgelegte Positionen zu Beginn automatisch 'Objekte' erstellt werden, wobei ich mit Objekt einfach mindest ein Bild und ein label meine, die beim anklicken das gleiche ereignis aufrufen, also sich quasi wie ein einzelner button verhalten.
    Wie könnt ich es hinkriegen, das Ereignis nicht für das jeweilige Bild (weil das vlt auch sehr viel mehr werden können, kann ich jetzt schlecht abschätzen) und das label mehrfach definieren zu müssen?

    Das aufgerufen ereignis soll dann nur die nummer des objektes an immer die selbe funktion als parameter übergeben, und diese logischerweise aufrufen.

    Und wie könnt ich eine schleife schreiben, die automatisch (anhand einer externen liste, aber das krieg ich schon hin) diese objekte erstellt, ihnen nummern (und namen) sowie die oben beschrieben ereignisse zuweißt?

    es geht dabei nur nebensächlich um die zeitersparnis, die dinger nicht von hand zu platzieren 🙂 , sondern um die übertragbarkeit auf andere spielpläne mit unterschiedlich vielen benötigten objekten.

    danke euch

    PS: C++/CLI und Visual Studio 2008, is für die arbeit vorgeschrieben



  • Für die Erstellung der Liste aus deiner externen Liste schlag ich dir XML-Serialisierung vor.

    Dannach kannst du folgendermaßen vorgehen:

    -> Durch die Liste gehen und jedem Objekt das Ereignis zuweisen

    -> Objekte zeichnen



  • Danke für die erste antwort, aber eigentlich hätt ich nichts gegen eine etwas ausführlichere aussage 🙂 am besten mit nem kleinen bsp.code



  • Wofür denn genau ein Beispiel? Serialisierung schaust du dir am besten selbst an. - Da gibt es genügend Tutorials im Netz.

    Das Registrieren der Eventhandler könnte so aussehen (Sorry dürfte eher nach C# aussehen, was dem aber kein Abbruch tut):

    foreach(MeinObject object in objectlist)
    {
        object.Click += new EventHandler(ObjectClick);
    }
    

    Die ObjektClick-Methode müsste dann wie folgt aussehen:

    private void ObjectClick(Object sender, EventArgs e)
    {
         MeinObject object = (MeinObject)sender; // so könntest du an den Namen des Objectes kommen / natürlich auch alle anderen Properties
         // weitere Verarbeitung
    
         // Das wäre dann der Aufruf deiner eigenen Methode
         MeineMethode(object.Nummer);
    }
    

    Die Anpassung an C++/Cli sollte eigentlich kein Problem sein. - Die Sache mit dem Label, verstehe ich es richtig, dass für jedes Bild dann ein Label existieren soll? - Da könntest du in dem moment wo du das Bild zeichnest ebenfalls direkt ein Label erstellen.

    So in etwa (Solltest du aus der OnPaint aufrufen):

    private void ZeichneObjekte()
    {
       foreach(MeinObject object in objects)
       {
            PictureBox pbBild = new PictureBox();
            pbBild.Height = object.Bild.Height;
            pb.Width = object.Bild.Widht;
            pb.Top = positionX;
            pb.Left = positionY;
            Label meinLabel = new Label();
            meinLabel.Text = object.Text;
            meinLabel.Top = positionY + object.Bild.Height;
            meinLabel.Left = positionX;
    
            this.Controls.Add(pbBild);
            this.Controls.Add(meinLabel);
       }
    }
    

    Natürlich wäre das alles ungetesteter Code, aber so in etwa solltest du es hinbekommen.


Anmelden zum Antworten