Quando si passa a un controllo CEdit nella mia finestra di dialogo utilizzando il tasto tabulazione oi tasti freccia, viene selezionato tutto il testo nel controllo. Questo comportamento mi sta causando problemi e lo preferirei se il controllo posizionasse il cursore all'inizio (o alla fine) del testo e non selezionasse nulla. C'è un modo semplice per farlo (ad esempio una proprietà del controllo che posso impostare)?CEdit seleziona tutto quando ottiene lo stato attivo
risposta
Non penso che esista un tale stile.
Ma è possibile aggiungere gestore onSetFocus con la procedura guidata:
void CMyDlg::OnSetfocusEdit1()
{
CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);
e->SetSel(0); // <-- hide selection
}
Un altro modo di raggiungere il vostro obiettivo è quello di impedire che il contenuto venga selezionato. Quando si naviga sui controlli in una finestra di dialogo, il gestore di finestre interroga i rispettivi controlli su determinate proprietà relative al loro comportamento. Per impostazione predefinita, un controllo di modifica risponde con un flag DLGC_HASSETSEL
per indicare al gestore di finestre di dialogo che il suo contenuto deve essere selezionato automaticamente.
Per risolvere il problema, è necessario creare una sottoclasse del controllo di modifica e gestire il messaggio WM_GETDLGCODE per modificare i flag in modo appropriato. In primo luogo, derivare una classe da CEdit
:
class CPersistentSelectionEdit : public CEdit {
public:
DECLARE_MESSAGE_MAP()
afx_msg UINT OnGetDlgCode() {
// Return default value, removing the DLGC_HASSETSEL flag
return (CEdit::OnGetDlgCode() & ~DLGC_HASSETSEL);
}
};
BEGIN_MESSAGE_MAP(CPersistentSelectionEdit, CEdit)
ON_WM_GETDLGCODE()
END_MESSAGE_MAP()
sottoclasse Avanti il controllo effettivo. Ci sono diversi modi per farlo. Per semplificare le cose solo dichiarare un membro della classe m_Edit1
di tipo CPersistentSelectionEdit
nella classe di finestra di dialogo e aggiungere una voce appropriata in DoDataExchange
:
// Subclass the edit control
DDX_Control(pDX, IDC_EDIT1, m_Edit1);
A questo punto si dispone di un controllo di modifica che non ha il suo contenuto di auto-selezionato quando navigato a. Puoi controllare la selezione come preferisci.
Se si utilizza questo metodo non si perde la posizione del cursore ogni volta che si imposta lo stato attivo sulla casella di testo, quindi preferisco. – DanDan
- 1. Android ListView personalizzato con ImageButton non ottiene lo stato attivo
- 2. editText non perde lo stato attivo
- 3. selezione cambia colore quando Firefox perde lo stato attivo
- 4. WPF: Rileva quando la finestra perde lo stato attivo
- 5. Impostare lo stato attivo su un pulsante
- 6. Bootstrap 3 Scrollspy rimuove lo stato attivo
- 7. Seleziona tutto il testo in "readonly" <input /> quando diventa attivo
- 8. WPF: Impossibile impostare lo stato attivo
- 9. Impostare lo stato attivo sull'elemento contented div
- 10. Summernote: impostare lo stato attivo dopo l'inizializzazione
- 11. Mostra il cursore all'interno di EditText quando lo stato attivo non è attivo EditText
- 12. Wagr Datagrid "Seleziona tutto" - "Deseleziona tutto" anche?
- 13. Seleziona tutto WPF DataGrid
- 14. Come si ottiene lo stato della stampante?
- 15. ottiene lo stato di ToggleButton tramite handler
- 16. L'elemento selezionato perde stile quando lo stato attivo si sposta in WBox ListBox
- 17. ListView in SlidingDrawer perde lo stato attivo dopo onResume
- 18. Come rendere SearchView perdere lo stato attivo e comprimere quando si fa clic altrove sull'attività
- 19. Firefox non aggiorna la pagina correttamente quando lo stato cambia quando non è attivo
- 20. NSWindow non riceve alcuna notifica quando si perde lo stato attivo
- 21. Funzione "seleziona tutto" e iCheck
- 22. UISearchBar seleziona tutto il testo
- 23. jQuery seleziona change event quando si seleziona lo stesso valore
- 24. Come avviare jquery datepicker con lo stato attivo
- 25. Avvio di un processo senza rubare lo stato attivo (C#)
- 26. Come rilevare lo stato attivo del browser sui dispositivi mobili?
- 27. Vedere se ContentEditable div ha lo stato attivo
- 28. Come impostare lo stato attivo su UserControl (renderlo selezionabile)?
- 29. Datagrid Imposta lo stato attivo sulla riga appena aggiunta
- 30. Quali elementi HTML possono ricevere lo stato attivo?
Questo non ha funzionato per me. Il mio controllo di modifica è multilinea e il cui contenuto può essere più alto del controllo (ho una barra di scorrimento verticale). Il bNoScroll deve essere VERO, e la selezione per "no select" è -1, 0, quindi il mio codice lo ha chiamato come 'e-> SetSel (-1, 0, TRUE);'. Questo mantiene qualsiasi posizione di scorrimento corrente mentre passo attraverso i controlli della mia finestra di dialogo, ma assicura anche che nulla venga selezionato una volta che la messa a fuoco ritorna al mio controllo di modifica. – franji1