Edit Control + int Variable + UpdateData = lässtige Meldungen!!



  • Hi Leute!

    Hab ein Problem zudem ich noch nix passendes hier im Forum gefunden hab (vielleicht liegt es auch daran das ich nicht weis nach welchem Begriff ich überhaupt suchen sollte, habt Nachsehen :)).

    Prob:
    In einer Dialogbasierten Anwendung hab ich ein Edit Control welches ich mit ner int Variable verknüpfe um Values hin- und her zu tun.

    Mein Code:

    void CMyDlg::OnEnChangeSourceParam()
    {
    	UpdateData();
    	if ((m_iSourceChannel == 10) & (m_ctrlSourceType.GetCurSel()==1))
    	{
    		m_cPercussion.ShowWindow(SW_SHOW);
    		if ((m_iSourceParam >= 35) & (m_iSourceParam <= 81))
    		{
                m_cPercussion.SetCurSel((m_iSourceParam - 35));
    			UpdateData(FALSE);
    		}
    		else
    		{
    			//todo
    		}
    	}
    
    }
    

    da durch die int Variable die SDK nun unbedingt will das im Editfeld auch eine int Zahl steht, belästigt mich ständig diese Meldung wenn das Editfeld mal kurz leer ist. Ich mein wenn ich ne Zahl eingeben will tu ich die vorige löschen, normal oder? Durch das UpdateData jedoch nimmt er gleich das leere Feld und dann gibts ne Meldung. Das UpdateData desshalb weil ich will das in einer Nebenstehenden Combo Box parallel eine Auswahl eingeblendet wird und zwar immer gleichzeitig mit dem ändern der Zahl im Edit Feld.

    Gibt es keine Möglichkeit dies Meldung wegzumachen? Zumindest solange ich im Fokus des Edit Feldes bin?
    Oder irgent einen anderen korrekten Trick mit dem ich aber das selbe Ergebnis erziehle? Oder ist mein Ansatz grundlegend falsch??

    Danke im vorraus für FeedBacks!

    Gruss
    Artur



  • hab da mal eine Lösung 😉

    void CDebugServerDlg::OnChangeJitter() 
    {
    
    	CString text;
    	GetDlgItemText(IDC_JITTER,text);
    	// Programm is getting extremely angry with 'NULL' in the delay-field...
    	if (text.IsEmpty())
    		{
    		SetDlgItemText(IDC_JITTER,"0");
    		}
    	UpdateData(true);
    }
    

    Hab auch andere Sachen probiert, aber nur das hier hat funktioniert.
    IDC_JITTER ist natürlich als "number" definiert.



  • Als CString eingeben und mit atoi(...) dann in int konvertieren.

    PS: Bist du dir sicher, dass die if-Verzweigungen auch das machen was du willst ? 😉



  • wau, das ging schnell! danke!

    die erste lösung ist ganz gut, blöd ist nur das dann automatisch 0 eingetragen wird. ist zwar ein schönheitsfehler, es ließe sich aber damit leben.

    den zweiten vorschlag probier ich gleich mal aus.

    PS: Bist du dir sicher, dass die if-Verzweigungen auch das machen was du >willst ?
    @CrazyOwl
    ich hoffe es 🙂



  • Also ich machs normal immer mit der 2 Lösung und hatte noch nie Probleme damit.

    Zu den ifs:
    Wenn du willst, dass beides zutreffen will, damit er reingeht, dann brauchst du 2& als if(a==1 && a==2)



  • feisX schrieb:

    blöd ist nur das dann automatisch 0 eingetragen wird. ist zwar ein schönheitsfehler, es ließe sich aber damit leben.

    Das wird bei der Lösung mit CString und atoi(...) nicht gemacht. 😃
    Sorry @ sarasne 😉



  • Man kann ja auch '2' eintragen :p
    Ist voll flexibel 🕶



  • so, zweite Lösung geht sehr gut.
    ja das mit &&, ähm ... wollt euch nur testen 🙂

    @sarasne
    ja schon aber darum gehts nicht. Lösch ich das EditFeld erscheit die 0 oder 2 oder was auch immer hinter dem Cursor weisch. Will ich z.B. 37 eingeben sieht das nach dem löschen dann so aus: |2 ,dann muss ich die 2 trotzdem löschen da die Einer eine 7 sein muss.

    also besten dank nochmal 🙂



  • Ich geb nicht auf:

    void CDebugServerDlg::OnChangeJitter()  
    { 
    
        CString text; 
        GetDlgItemText(IDC_JITTER,text); 
        // Programm is getting extremely angry with 'NULL' in the delay-field... 
        if (!text.IsEmpty()) 
            { 
            UpdateData(true); 
            } 
    
    }
    

    Und somit kein unnötiges rumformatieren im eigenen Code



  • @sarasne
    hey das ist mal ne elegante lösung! 🙂

    big thnx!


Anmelden zum Antworten