SetReadOnly funktioniert nicht!



  • Hallo Alle zusammen,

    bei mir tritt ein komisches Phänomen auf, ich hab eine dialogbasierte Anwendung, die mit dem SetReadOnly arbeitet, d.h. ich aktiviere und deaktivere z.B. Textboxen.

    Jetzt habe ich zwei Teilbereiche in meiner Anwendung...das ist sozusagen eine Datenbankverwaltung. Ich klicke in einem Teil der Anwendung, um einen neuen Datensatz in eine bestimmte Tabelle anzulegen, d.h. ich aktiviere die Textboxen aus "nur lesend" in schreibend eben. Ich schreibe was rein und speichere es in der Datenbank ab. Jetzt möchte ich in dem anderen Teilbereich der Anwendung in eine andere Tabelle reinschreiben, und sage Neu, SetReadOnly wird auf False gesetzt und schreibe da was rein.

    Das Problem ist jetzt, dass, wenn ich zuerst in dem anderen Teilbereich was reinschreibe, dann funktioniert das SetReadOnly, aber wenn ich vorher in dem einem Teilbereich Nr. 1 was reinschreibe und dann in dem Teilbereich Nr. 2 was reinschreiben möchte, werden plötzlich die Boxen nicht mehr aktiviert, sprich SetReadOnly funktioniert nicht...die beiden Teilbereiche befinden sich auf einem Dielogfenster.

    Vielleicht ist das Phänomen bekannt, und jemand weiss eine Erklärung hierzu. Mit Code wartet ich jetzt erstmal, da das etwas viel ist.

    Gruss,
    chullain


  • Mod

    Was funkltioniert nicht?

    Kontrolliere mal die Handles auf die Du SetReadOnly anwendest... vermutlich hast Du nur die Fenster verwechselt. Ansonsten ein wenig Code mag hilfreich sein!



  • Das kann ja an dem Handle nicht liegen, denn beim ersten Aufruf des Teilbereich Nr.2 werden auch alle Textboxen richtig eingeblendet, nur wenn ich VORHER Teilbereich Nr.1 aufrufe und DANN Teilbereich Nr.2, werden die Textboxen nicht mehr eingeblendet.

    Teilbereich Nr.1

    void CDBPflege::OnRecordAdd()
    ...
    ...
       void CDBPflege::ActivateAnw() {
       ...
       ((CEdit*)GetDlgItem(IDC_EDIT1))->SetReadOnly(TRUE);
       //HIER WERDEN DIE OBJEKTE VOM TEILBEREICH NR.2 GARNICHT ANGEFASST
       ...
       }
    UpdateData(FALSE);
    ...
    }
    

    Teilbereich Nr. 2

    void CDBPflege::OnBVHinzufuegen() {
    ...
       UpdateData(TRUE);
       ...
       void CDBPflege::DeActivateBV() {
         ((CEdit*)GetDlgItem(IDC_BV_UserName))->SetReadOnly(FALSE);
         ((CEdit*)GetDlgItem(IDC_BV_Password))->SetReadOnly(FALSE);
       }
       ...
       UpdateData(FALSE);
    }
    

    So tritt das Problem auf, dass die EditBox "IDC_BV_UserName" ganz normal auch weiterhin eingeblendet wird, aber die EditBox "IDC_BV_Password", nachdem der erste Teilbereich aktiviert wurde, nicht mehr eingeblendet wird...

    Gruss,
    chullain


  • Mod

    void CDBPflege::OnBVHinzufuegen() { 
    ... 
       UpdateData(TRUE); 
       ... 
       void CDBPflege::DeActivateBV() { 
         ((CEdit*)GetDlgItem(IDC_BV_UserName))->SetReadOnly(FALSE); 
         ((CEdit*)GetDlgItem(IDC_BV_Password))->SetReadOnly(FALSE); 
       } 
       ... 
       UpdateData(FALSE); 
    }
    

    Hier wird kein Code sugeführt sondern in der Funktion eine weitere lokale Funktion erzeugt.
    Die Verwednung des Debuggers hätte Dir hier geholfen! Warum hast Du nicht gedebuggt!



  • Sorry, die Funktion wird natürlich in der Form aufgerufen, ich hab das nur so geschrieben, um die vielen Funktionen zu etwas kürzerem Code zusammenzufassen:

    void CDBPflege::OnBVHinzufuegen() { 
    ... 
       UpdateData(TRUE); 
       ... 
       CDBPflege::DeActivateBV();
       ... 
       UpdateData(FALSE); 
    }
    

    ...oder ist das auch falsch?

    Das Problem ist, dass IDC_BV_UserName aktiviert wird und IDC_BV_Password nicht.

    Gruss,
    chullain


Anmelden zum Antworten