UserControl - Korrekter Punkt zur Initialisierung



  • Moin!

    Ich habe ein UserControl mit einer List<CustomClass> Property, welche Daten enthält die in diesem Steuerelement angezeigt werden. In meiner Form initialisiere ich diese Liste im Load Event:

    private void OnLoad(object sender, EventArgs e)
            {           
                List<AttributeItem> listAtt = LoadAttributes();
    
                foreach (AttributeItem att in listAtt)
                {
                    attributeListControl1.Items.Add(att);                    
                }
            }
    

    Nun dachte ich mir, kann ich diese Item-Liste im Load Event des UserControls auslesen und verarbeiten, aber stellte dann fest das jenes Load Event im UserControl schon VOR dem Load Event des Forms aufgerufen wird, in dem sich das Control befindet. Wo macht man sowas dann alternativ am besten? Oder gibts eine andere Möglichkeit?


  • Administrator

    Überschreib die OnLoad Methode der Form. Ruf die Methode der Basisklasse erst nach deinem Code auf. Dann sollte es, wenn ich mich recht entsinne, funktionieren. Gerade keine Zeit dies selber zu testen 😉

    Grüssli



  • Habs erstmal umgangen, indem ich die Items Property des eingebetteten Steuerelements bis vorn zum UserControl durchreiche. Die meissten Controls müssten meiner Meinung nach aber auch etwas ähnliches machen, nur wo? Wenn ich z.B. in OnLoad meiner Form die Items einer Combobox verändere, sind diese ja bei der Anzeige der Combobox fertig initialisiert / Werden in der Liste dargestellt etc - Vermutlich fängt die Combobox ein AddItem Event ab, oder? Eine handelsübliche List<sdlkf> hat sowas ja nicht.


  • Administrator

    Cpp_Junky schrieb:

    Habs erstmal umgangen, indem ich die Items Property des eingebetteten Steuerelements bis vorn zum UserControl durchreiche. Die meissten Controls müssten meiner Meinung nach aber auch etwas ähnliches machen, nur wo?

    Was genau haben?

    Cpp_Junky schrieb:

    Wenn ich z.B. in OnLoad meiner Form die Items einer Combobox verändere, sind diese ja bei der Anzeige der Combobox fertig initialisiert / Werden in der Liste dargestellt etc - Vermutlich fängt die Combobox ein AddItem Event ab, oder? Eine handelsübliche List<sdlkf> hat sowas ja nicht.

    Die ComboBox ist mit ihrer ObjectCollection verbunden. Items gibt eine ObjectCollection zurück. Das ist aber intern gelöst. ObjectCollection nimmt per Constructor eine ComboBox .

    Ich verstehe aber nicht so recht, was du nun eigentlich erreichen möchtest. Könntest du vielleicht mal etwas dazu sagen, was dein eigentliches Ziel ist?

    Grüssli



  • Mein UserControl enthält eine Combobox. Diese soll aus meiner Form heraus mit Items befüllt werden. Also so eine Konstruktion:

    Form > UserControl > Combo

    Die Items für die Combo werden dynamisch ermittelt und stehen der Form im Load Event zur Verfügung. Sollen also in dem Augenblick an das UserControl weitergereicht werden. Dieses verarbeitet dann die Items in ein Paar Schritten und fügt sie der Combo hinzu. Das Problem an der Sache war nun, den richtigen Punkt zu finden, an dem das Load Event der Form bereits aufgerufen wurde, so das mein UserControl diese Verarbeitungsschritte durchführen kann. Ich hatte dazu das Load Event des UserControls angedacht - Dieses wird jedoch VOR dem Load Event der Form ausgelöst (zu früh / Items noch nicht bekannt). Da stellte ich mir die Frage, wie es die Combobox "von Natur aus" macht. Denn die kommt ja auch damit klar, wenn ich im Load Event der Form die Items manipuliere.


Anmelden zum Antworten