Problem mit Editfeldern



  • Ich habe ein Programm mit 3 Edit feldern. Ich habe mit folgender Funktion ermöglicht das wenn das Editfelt voll ist das zum nächsten gewechselt würd.

    void CHalfLifeSerialEditDlg::OnChangeEditKeyp1() 
    {
        UpdateData();
    
        if(m_key1.GetLength() == 4)
        {
            GetDlgItem(IDC_EDIT_KEYP2)->SetFocus();
        }
    }
    
    void CHalfLifeSerialEditDlg::OnChangeEditKeyp2() 
    {
        UpdateData();
    
        if(m_key2.GetLength() == 5)
        {
            GetDlgItem(IDC_EDIT_KEYP3)->SetFocus();
        }
    }
    

    Aber nu wollte ich erreichen das mann wenn man z.b in 2 edit felt ist und auf del geht das er buchstabe für buchstabe löscht (was ja nich das Prob ist) und wenn nichts mehr im Editfelt drin ist ganz zum ende von Editfelt 1 springt aber das bekomme ich nur bedingt hin:

    void CHalfLifeSerialEditDlg::OnChangeEditKeyp1() 
    {
        UpdateData();
    
        if(m_key1.GetLength() == 4)
        {
            GetDlgItem(IDC_EDIT_KEYP2)->SetFocus();
        }
    }
    
    void CHalfLifeSerialEditDlg::OnChangeEditKeyp2() 
    {
        UpdateData();
    
        if(m_key2.GetLength() == 5)
        {
            GetDlgItem(IDC_EDIT_KEYP3)->SetFocus();
        }
        else if (m_key2.GetLength() == 0)
        {
            GetDlgItem(IDC_EDIT_KEYP1)->SetFocus();
        }
    }
    
    void CHalfLifeSerialEditDlg::OnChangeEditKeyp3() 
    {
        UpdateData();
    
        if(m_key2.GetLength() == 5)
        {
            GetDlgItem(IDC_EDIT_KEYP3)->SetFocus();
        }
        else if (m_key2.GetLength() == 0)
        {
            GetDlgItem(IDC_EDIT_KEYP2)->SetFocus();
        }
    }
    

    Dadurch springt er ja wie gewünscht zurück aber leider an die erste stelle des Feldes und nichts zum Ende wie kann ich das änder?



  • else if (m_key3.GetLength() == 0)
    {
            CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_KEYP2);
            pEdit->SetFocus();
            pEdit->SetSel(pEdit->GetWindowTextLength(),pEdit->GetWindowTextLength());
    }
    

    [ Dieser Beitrag wurde am 15.06.2003 um 12:10 Uhr von dEUs editiert. ]


Anmelden zum Antworten