CoboBox ...?



  • Hallo Leute,
    Habe wieder mal ein Prob in Visual C#.
    Habe folgende ComboBox per Code erzeugt:

    void Func_irgendwas(object sender, EventArgs e){
    ComboBox nlist = new ComboBox();
    Controls.Add(nlist);
    nlist.Location = new System.Drawing.Point(35, 160);
    nlist.Items.Add("x");
    nlist.Items.Add("y)");
    nlist.Items.Add("z");
    nlist.Size = new System.Drawing.Size(145, 21);
    

    So, jetzt will ich, dass wenn der User etwas von dieser Box etwas wählt, irgendwas passiet.
    Habe es so gedacht:

    nlist.SelectedIndexChanged +=new EventHandler(nlist_SelectedIndexChanged);
    }  // hier ist die funktion Func_irgendwas zu..!                
                      .
                      .
                      .
    void nlist_SelectedIndexChanged(object sender, EventArgs e){
    if(nlist.SelectedItem.Equals("x")){ // hier ist der Fehler
    //hier soll dann ebend was passieren
    }
    }
    

    Das Prob ist jetzt, dass nlist in der Funktion nlist_SelectedIndexChanged nicht gesehen werden kann, da sie ja lokal ist.
    Wie kann ich das denn umschreiben, ohne natürlich nicht nlist als global zu deklarieren..?



  • Dreimal darfst Du raten was sich hinter dem Object "sender" in der Parameterliste des Events verbirgt 😉



  • dem control einen namen verpassen und dann per namen ansprechen?
    am sonsten muesstest du die children von "Control" durch laufen und nach deinen element suchen



  • loks schrieb:

    Dreimal darfst Du raten was sich hinter dem Object "sender" in der Parameterliste des Events verbirgt 😉

    Bin im raten leider nicht gut..! 😉
    Meinst du ich soll "nlist" als Parameter übergeben..?

    Mr Evil schrieb:

    dem control einen namen verpassen und dann per namen ansprechen?
    am sonsten muesstest du die children von "Control" durch laufen und nach deinen element suchen

    Verstehe nciht was du meinst mit dem Control einen namen verpassen...???
    Die ComboBox hat ja schon einen Namen und zwar nlsit...!
    Köntest du mir das bitte pränziser erklären..?



  • Ok, nochmal ausführlich.

    Jeder Event einer hat den Aufbau:

    irgendeinevent(object sender, Eventargs s)

    Das könnte Dir eigendlich auffallen (und ist auch so in der MSDN dokumentiert)

    Dabei ist der sender immer das Objekt, das den Event ausgelöst hat. In Deinem Fall z.B. die Combobox.



  • loks schrieb:

    Ok, nochmal ausführlich.

    Jeder Event einer hat den Aufbau:

    irgendeinevent(object sender, Eventargs s)

    Das könnte Dir eigendlich auffallen (und ist auch so in der MSDN dokumentiert)

    Dabei ist der sender immer das Objekt, das den Event ausgelöst hat. In Deinem Fall z.B. die Combobox.

    Jo ok, das ist mir ja schon bei deinem ersten Beitrag aufgeffalen.
    Mein Prob ist aber wie ich auf das Objekt zugreifen kann..?
    Mit "sender." kann ich ja nicht zugreifen, mit "nlist." ja auch nicht.



  • Warum nicht ? Fehlt das wissen für nen Cast ?



  • Knuddlbaer schrieb:

    Warum nicht ? Fehlt das wissen für nen Cast ?

    Verstehe nicht wieso ich hier irgendwas casten soll, will ja nur auf einem Objekt zugreifen.



  • Ich habe zwar von C# soviel Ahnung wie von Molekularbiologie, aber ich würde ja mal ganz stark vermuten, dass du sender von object nach ComboBox casten musst. Schließlich willst du Methoden der Klasse ComboBox aufrufen, sender hat aber den Typ object, der diese Methoden nicht bietet. Alles klar?



  • Ahh ok, habe ich verstanden.
    Aber wie caste ich denn..?
    Habe bis jetzt wenig Erfahrung mit casts, meistens waren es einfache Beispiele.



  • Habe es rausgekriegt,

    ComboBox cb = (ComboBox)sender;
    

    und dann einfach mit cb. zugreifen..!

    Dachte nicht, dass es so einfach wäre..!

    DANKE an Alle für eure Hilfe..!

    !..MFG Bonafide..!



  • besser is

    ComboBox box = sender as ComboBox;

    aber deines geht auch

    anm.: deine variable heisst vieleicht nlist, aber die ComboBox selber hat noch keinen namen - siehe das dependency property "nList.Name"
    das kannst du auch noch setzen



  • Thx Mr. Evil..!

    Hätte jetzt mittlerweile beim Testen verschiedener Sachen mal ne andere Frage, die auch mit der ComboBox zu tun hat. Und zwar:
    Wenn man eine ComboBox Adden will, geht es doch ganz einfach mit

    Controls.Add(ComboBox);
    

    Aber wenn man die dann mal entfernen will, geht das nicht so einfach, also mit:

    Controls.Remove(ComboBox);
    

    In MSDN (http://msdn.microsoft.com/de-de/library/aa984275(VS.71).aspx)
    steht, dass man den Ereignishandler vom Ereignis entfernen soll mit -=, dann den Remove-Befehl und dann ein Dispose-Befehl. Auf der Seite gibt es auch ein Beispiel mit einem Button. Meine Frage wäre jetzt, wieso man den Ereinishandler vom Ereignis entfernen soll, also wieso dieser Befehl mit dem -= ..?
    Ich meine wenn ich das Steuerelement enferne, funktioneirt dann sowieso kein Ereigniss mehr, wieso dann solch Aufwand..?
    Und habe versucht das Beispiel von dieser Seite in einem Beispiel mit ner ComboBox auszuprobieren und bei mir klappt es nicht, hier der Code..:
    (Habe ComboBox1 grafisch erstellt mit 2 Items("1"und"2"), wenn man 1 wählt passiert was, wird bei obox_SelectedIndexChanged behnadelt und ist grad unwichtig, wenn man aber 2 wählt, dann soll die erste ComboBox, die ich grafisch erstellt habe von der Form entfernt werden..!)

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                ComboBox obox = new ComboBox();
                if (comboBox1.SelectedItem.Equals("1"))
                { 
    
                    obox.Location = new Point(42, 87);
                    Controls.Add(obox);
                    obox.Items.Add("a");
                    obox.Items.Add("b");
                    obox.Items.Add("c");
                    obox.SelectedIndexChanged += new EventHandler(obox_SelectedIndexChanged);
                }
                if (comboBox1.SelectedItem.Equals("2"))
                {
    
                    if (Controls.Contains(obox))//Hier is irgendwo der fehler
                    {                           // ------ 
                        obox.SelectedIndexChanged -= new System.EventHandler(obox_SelectedIndexChanged);
                        Controls.Remove(obox);
                        obox.Dispose();
                    }                          // ------
    
                }
            }
    

    Wo ist mein Fehler..?


Anmelden zum Antworten