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.


Log in to reply