Membres inscrits :2359
Membres en ligne : 0
Invités en ligne : 3


|
Conversation (Résolue) : wxTextCtrl et OnFocus |
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne |
Bonjour,
Est-ce possible que quand un wxTextCtrl a une valeur "$100" et on quand on clic pour l’éditer ce valeur devient "100" (c-a-d OnFocus). et quand on quitte l’éditeur, le "$" est ajourer.
Comme dans l'excel.
Je sais pas si vous comprenez mais c'est un peut difficile pour moi de l'expliquer.
En faite je veux utiliser le code suivant pour le onfocus
Code wxWidgets: wxString tmp=TextCtrl1->GetValue(); tmp.Replace(_("$",_(""),true)); TextCtrl1->SetValue(tmp);
et le code suivant quand on quitte l’éditeur
Code wxWidgets: TextCtrl1->SetValue(wxString::Format(_("$%s"),TextCtrl1->GetValue()));
Dernière modification par ajm (11-02-2014 07:39:18)
|
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne |
Salut.
Je viens d'essayer, et ça marche nickel.
Tu connectes les évènements "wxEVT_SET_FOCUS" et "wxEVT_KILL_FOCUS" de ton wxTextCtrl à deux méthodes dans lesquelles tu gères ton affichage.
Tu n'oublies pas d'appeler "Skip" sur le wxFocusEvent dans les deux cas, pour laisser le comportement par défaut se faire.
Voici un exemple fait à l'arrache' (il y a un wxButton et un wxTextCtrl supplémentaires pour pouvoir donner le focus à un autre contrôle):
Code wxWidgets: MainFrame::MainFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title) { wxPanel *pnl=new wxPanel(this, -1); wxBoxSizer *szrMain=new wxBoxSizer(wxVERTICAL); szrMain->Add(new wxButton(pnl, -1, _T("")), 0, wxALL|wxEXPAND, 5); wxBoxSizer *lnszr=new wxBoxSizer(wxHORIZONTAL); lnszr->Add(new wxStaticText(pnl, -1, _T("Valeur :")), 0, wxALL|wxALIGN_CENTER_VERTICAL, 0); m_txtValue=new wxTextCtrl(pnl, -1, _T("$ 0.00")); lnszr->Add(m_txtValue, 1, wxLEFT, 5); szrMain->Add(lnszr, 0, wxLEFT|wxRIGHT|wxEXPAND, 5); szrMain->Add(new wxTextCtrl(pnl, -1, _T("")), 0, wxALL|wxEXPAND, 5); pnl->SetSizer(szrMain); m_txtValue->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(MainFrame::OnGetFocus), NULL, this); m_txtValue->Connect(wxEVT_KILL_FOCUS, wxFocusEventHandler(MainFrame::OnKillFocus), NULL, this); } MainFrame::~MainFrame() { // Destructeur } void MainFrame::OnGetFocus(wxFocusEvent &event) { double dVal; wxString sValue=m_txtValue->GetValue(); if (sValue[0]==_T('$')) sValue[0]=_T(' '); sValue.ToDouble(&dVal); m_txtValue->ChangeValue(wxString::Format(_T("%0.2f"), dVal)); m_txtValue->SetSelection(-1, -1); event.Skip(); } void MainFrame::OnKillFocus(wxFocusEvent &event) { double dVal; wxString sValue=m_txtValue->GetValue(); if (sValue[0]==_T('$')) sValue[0]=_T(' '); sValue.ToDouble(&dVal); m_txtValue->ChangeValue(wxString::Format(_T("$ %0.2f"), dVal)); event.Skip(); }
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà ... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
|
ajm (Membre)
Inscrit le : 16-03-2011
Messages: 82
Snippets: 0
Tutoriels: 0
Hors ligne |
Merci pour la réponse. Je vais faire le test. ---------- Ca marche très bien.
Merci Xav
Dernière modification par ajm (11-02-2014 09:43:23)
|
|
|