Frage zur Aktualisierung von EditFeldern



  • Hallo!
    Ich möchte durch eine Eingabe in einem EidtFeld den Wert in einer Kombinationsbox ändern. Das heißt bei einem bestimmten CString soll in der Kombinationsbox der passende String dazu erscheinen(Das ganze muss erst passieren wenn ich auf OK-geklickt habe). Zur Zeit versuche ich das so. Das funktioniert aber nicht. Weiß jemand wieso oder hätte einen besseren Vorschlag.

    UpdateData();
    	Name = GetName();
    	Auto = GetAuto();
    	UpdateData();
    	iCompare = Name.Compare(_T("Name"));
    	if(iCompare > 0)
    	{
                 iCompare = Auto.Compare(_T("Automatisch")); //In der     
    	    if(iCompare == 0)                            //Kombibox steht  
    	    {                                               //Automatisch
    		PutAuto(_T("Passendes Auto zum Namen"));
    	    }
    
    	}
    	UpdateData();
    

    PutAuto setzt die Membervariable für die Kombinationsbox.

    void PutAuto(const CString& str)
    	{m_strAuto = str;}
    

    Und GetAuto() und GetName() lesen Sie aus dem Bearbeitungsfeld ein.

    CString GetName() const
    	{return m_strName;}
    
    	CString GetAuto() const
    	{return m_strAuto;}
    


  • Hallo,

    eine kleine "Merkregel":

    UpdateData() oder UpdateData(TRUE): von der Anzeige in die Member-Variablen

    UpdateData(FALSE): von den Member-Variablen in die Anzeige

    jetzt müßtest du wissen, was du falsch gemacht hast

    MfG



  • so ist das also
    danke werd ich dann mal probieren



  • Jetzt hab ichs so gemacht. Geht aber immer noch nicht 🙄 .

    if(iCompare > 0) 
        { 
                 iCompare = Auto.Compare(_T("Automatisch")); //In der     
            if(iCompare == 0)                            //Kombibox steht   
            {                                               //Automatisch 
            PutAuto(_T("Passendes Auto zum Namen")); 
            } 
    
        } 
        UpdateData(FALSE);
    

    Mach ich vielleicht bei dem vergleichen der strings was falsch oder hab ichs doch falsch verstanden????



  • es kann gut sein, daß gar nicht in den if-Zweig eingetreten wird. Bist du sicher, daß deine Bedingung:

    if(iCompare > 0)
    

    korrekt ist? Sollte es nicht

    if(iCompare != 0)
    

    heißen?

    MfG



  • So wie ich das in der anleitung verstanden hab ist der Rückgabewert 0 wenn die strings gleich sind. ich hab da wohl nen fehler beim reinkopieren gemacht. ich hab in der if-anweisung das so stehen if(iCompare == 0) dann soll er das machen. bei ungleich null springt er aber scheinbar auch nicht rein. das eben war nen fehler beim reinkopieren.



  • du mußt feststellen, warum die if-Bedingungen nicht erfüllt sind. Baue doch erst einmal MessageBoxen ein, um die Werte zu prüfen:

    UpdateData();
        Name = GetName();
        Auto = GetAuto();
    
        AfxMessageBox(Name);
        AfxMessageBox(Auto);
        // das nächste UpdateData brauchen wir nicht
        // UpdateData();
    
        iCompare = Name.Compare(_T("Name"));
        if(iCompare == 0)
        {
    
            iCompare = Auto.Compare(_T("Automatisch")); //In der     
            if(iCompare == 0)                            //Kombibox steht  
            {                                               //Automatisch
            PutAuto(_T("Passendes Auto zum Namen"));
            // UpdateData besser hier statt unten
            UpdateData(FALSE);
            }
    
        }
    

    und jetzt schau mal, ob das Textfeld Name wirklich den Wert "Name" anzeigt und das Feld Auto wirklich "Automatisch", und vergleiche das mit dem in den MessageBoxen angezeigten Werten. Du kannst auch zusätzlich noch im Debug-Modus einen Haltepunkt in die if's setzen, um zu prüfen, ob der Code dort erreicht wird.

    MfG



  • hi
    ich habs jetzt anders hingekriegt(allerdings glaub ich nicht seht professionell)

    if(GetName() == "Name")	
    	{
    	    if(GetAuto() == "Automatisch") 				
                 {
    		PutAuto(_T("Autoname"));	
    		UpdateData(FALSE);						    }
             }
    

    trotzdem danke für deine hilfe. das mit den rückgabewerten hat übrigens wirklich nicht gepasst.



  • einige können anscheindend ohne messageboxes nicht leben

    wieso setzen die meisten keine breakpoints sinnvoll und schauen im debugger nach??? Anstatt fleisig AfxMessageBox n-mal zu tippen mit den entsprechenden variablen.



  • fletscher schrieb:

    einige können anscheindend ohne messageboxes nicht leben

    ich kann z.B. sehr gut ohne damit leben, aber wenn vom Fragenden bisher noch nicht das Wort "Debugger" erwähnt wurde, könnte ich durchaus davon ausgehen, daß der Fragende damit vielleicht noch nicht (oder nie, oder selten) damit gearbeitet hat, so daß ich der Einfachheit halber (Einfachheit aus der Sicht des Fragenden) angeboten habe, gerade mal ZWEI MessageBoxen einzubauen, aber schließlich auch nicht unerwähnt gelassen habe, daß es einen Debugger gibt (und ich weiß auch, daß es noch ASSERT/VERIFY/TRACE usw...gibt ;)). Ich habe die MessageBoxen hier nur "intuitiv" angeboten, in der professionellen Entwicklung haben sie zu Debug-Zwecken eher nichts zu suchen....

    MfG


Log in to reply