CComboBox und delete



  • Hallo NG,

    ich brauche bitte noch einmal eine kleine Hilfe.

    Wenn ich eine dynamisch erstellte CComboBox mit delete "lösche" und anschließend wieder mit der selben ID erstelle, dann bekomme ich bei einem erneuten GetDlgItemText den alten ausgewählten Inhat der CComboBox, als wie wenn ich keine neu auswahl getroffen hätte?!?

    Vermutlich muss ich einen Flush durchführen, oder so was ähnliches. Aber wie?

    Und mit Clear() geht es nicht.

    Danke!

    Gruß Walter



  • Vor dem delete, DestroyWindow aufrufen. Dann müsste es gehen.



  • Ich denke mal der Destruktor von CWnd wird selbst DestroyWindow aufrufen, oder? 😃



  • Leider geht es auch nicht mit DestroyWindow.
    Die alten Daten bleiben erhalten, wenn ich mit GetDlgItemText auf die ID der CComboBox zugreife.

    Obwohl ich eine neue CComboBox mit Create erstellt habe, und eien neue Auswahl vorgenommen habe!

    [ Dieser Beitrag wurde am 20.09.2002 um 11:44 Uhr von Walter editiert. ]



  • Dein Fehler muss woanders liegen.
    Bei mir geht es Problemlos. Bist du auch sicher das deine Alte Combobox weg ist?



  • Wie kann ich mir denn sicher sein, was muss ich tun, um das zu kontrollieren?



  • Ich habs so getestet:

    static CComboBox* pCombo = 0;
        static n = 0;
    
        if(pCombo == 0 && n == 0)
        {
            pCombo = new CComboBox;
            pCombo->Create(WS_CHILD|WS_VISIBLE,CRect(10,10,100,100),this,55);
            SetDlgItemText(55, "Test");
        }
        else
        {
            if(n == 0)
            {
                n = 1;
                pCombo->DestroyWindow();
                delete pCombo;
                pCombo = new CComboBox;
                pCombo->Create(WS_CHILD|WS_VISIBLE,CRect(10,30,100,100),this,55);
            }
    
            CString string;
            GetDlgItemText(55,string);
            MessageBox(string);
        }
    

    Aber es wird daran liegen das deine altes Control noch existiert.
    Wenn du es nicht hinbekommst poste mal etwas Code...



  • Frage:

    Warum verwendest Du static?

    //Ich habe es in der Klasse  deklariert:
    
    CComboBox* pmyCombo1;
    
    //Nach dem Klick auf einen Button:
    
    pmyCombo1 = new CComboBox();
    pmyCombo1->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,
               CRect(left2,top,right2,bot + add), this, IDC_E1B);
    //Funktion, die die Items in die Combo einfügt
    //void AddComboItems(int Combo,int Arr);
    AddComboItems(1,0);
    
    //Nach dem Klick auf einen weiteren Button:
    
    //***1.
    
    GetDlgItemText(IDC_E1B,EntferneStrichpunkt(ARRInhalt[q]));
    
    pmyCombo1->DestroyWindow();
    delete pmyCombo1;
    
    //***2.
    
    pmyCombo1 = new CComboBox();
    pmyCombo1->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,
               CRect(left2,top,right2,bot + add), this, IDC_E1B);
    //Funktion, die die Items in die Combo einfügt
    //void AddComboItems(int Combo,int Arr);
    AddComboItems(1,0);
    
    //Nach dem Klick auf einen weiteren Button:
    
    //***1.
    
    GetDlgItemText(IDC_E1B,EntferneStrichpunkt(ARRInhalt[q]));
    
    pmyCombo1->DestroyWindow();
    delete pmyCombo1;
    
    //***2.
    
    pmyCombo1 = new CComboBox();
    pmyCombo1->Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,
               CRect(left2,top,right2,bot + add), this, IDC_E1B);
    //Funktion, die die Items in die Combo einfügt
    //void AddComboItems(int Combo,int Arr);
    AddComboItems(1,0);
    

    [ Dieser Beitrag wurde am 20.09.2002 um 12:34 Uhr von Walter editiert. ]



  • Aber ich vermute, dass das ein generelles Problem bei mir ist, da auch bei CEditBox,

    das was ich mit SetDlgItemText hineingeschrieben habe

    bei GetDlgItemText der Veränderte Text nicht ausgeklesen wird, sondern genau das was ich mit SetDlgItemText hineingeschrieben habe ...

    ???



  • GetDlgItemText(IDC_E1B,EntferneStrichpunkt(ARRInhalt[q]));

    ???

    Beim 2. Parameter von GetDlgItemText wird ein CString Objekt erwartet.

    EntferneStrichpunkt gibt sicherlich ein CString Objekt zurück.
    Das wird dann mit dem Text überschrieben und anschließend zerstört.

    CString string;
    GetDlgItemText(IDC_E1B,string);
    // Mit string was machen...
    

    static hab ich nur aus Faulheit genommen - Ich wollte nicht extra zum Testen eine Membervar. anlegen.



  • Vielen Dank,

    habe gerade gemerkt, dass in meiner Logik ein riesiger Knoten steck, wäre aber ohne Hilfe vermutlich nie drauf gekommen.

    Ein ganz dummer Anfängerfehler!

    GetDlgItemText(IDC_E1B,GetDlgInhalt);
    ARRInhalt[q] = EntferneStrichpunkt(GetDlgInhalt);
    

    Aber ich bin halt auch ein Anfänger.

    Vielen Dank noch einmal!

    Gruß Walter


Log in to reply