Cursor by CEdit



  • hallo!

    habe folgende procedur die soll nicht erlaben mehr als 3 zeichen in CEdit box zulassen.

    UpdateData(TRUE);
    	if (m_sInhaltBox.GetLength() > 3)
    	{
    		Beep(500,50);
    		m_sInhaltBox = m_sInhaltBox.Left(3);
    		m_ctrBox.SetSel(-1,-1);
    		UpdateData(FALSE);
    	}
    

    nach dem beep soll der cursor nach dem letzten zeichen bleiben aber er spring immer auf erste position....

    weiss jeemand was ich falsch gemacht habe?

    grüsse
    Adam 🙂



  • Wenn de mal sagst wo du die drei zeilen stehen hast? könnte man dir vielleicht helfen.

    Gruß Matthias



  • ok... sofort 🙂

    habe dialogbasierte anwendung, und da einen CEdit Edit1 -steuerelement. dieser setuerelement hat 2 variablen.

    - Control variable CEdit m_ctrBox;
    - Value variable CString m_sInhaltBox;

    in ereignishandler CMyProgrammDlg::OnEnChangeEdit1() soll nicht erlauben mehr als 3 zeichen reinzuschreiben.
    und das macht er auch sehr brav.... wenn nicht nur der curser were 😞

    void CMyProgrammDlg::OnEnChangeEdit1()
    {
    	UpdateData(TRUE);
        if (m_sInhaltBox.GetLength() > 3)
        {
            Beep(500,50);
            m_sInhaltBox = m_sInhaltBox.Left(3);
            m_ctrBox.SetSel(-1,-1);
            UpdateData(FALSE);
        }
    }
    

    gruss
    Adam



  • Hab jetzt keine Lust zu untersuchen warum der Cursor auf die erste Position springt, is aber auch egal. entweder Du setzt den Cursor am ende deiner Funktion auf die letzte Position (SetSel), oder Du erstellt deine eigene Klasse abgeleuitet von CEdit und überschreibst die OnChar oder PreTranslateMessage (mußte mal versuchen, und fänst die Eingabe weiterer Zeichen schon bei der Eingabe ab. die zweite Methode würde ich verwenden, da diese sauberer is, denn EnChange meldet dir ja nur das sich was geändert hat, und in deinem Fall is das etwas zu spät.

    Gruß Matthias


  • Mod

    Wenn der Inhalt eines Edit Controls geändert wird, wird der Cursor automatisch auf Position 0 zurück gesetzt! Das ist so by Design.


Anmelden zum Antworten