2010-09-17 3 views
1

Nous implémentons un champ de texte pour l'entrée numérique. Nous sous-classons la norme wxTextCtrl. Le comportement est que lorsque l'utilisateur décide de modifier la valeur, il obtient une version de précision complète et est sélectionnée.WX: tentative de sélection d'une valeur lorsque vous cliquez sur un champ de texte

première tentative a été de remplacer le gestionnaire de mise au point de sorte que lorsque le champ se concentrer la valeur est indiquée en totalité et sélectionné. Cela fonctionne très bien sauf dans les cas où vous cliquez sur le champ. Dans ce cas, le gestionnaire de focus est appelé et la valeur est sélectionnée ... mais quelque temps après, il est désélectionné et le point d'édition est placé là où le clic de souris s'est produit. Je pensais peut-être que je pourrais remplacer SetSelection et définir un point de débogage, mais il semble utiliser une autre méthode pour définir la sélection! Je suis obligé de marcher à travers les kilomètres d'événements pour gérer la merde ... Je pense aux manipulateurs de boutons de la souris mais jusqu'ici je n'en ai pas trouvé.

Ce serait bien si quelqu'un qui savent déjà ce que je dois passer outre à signaler. Où dois-je regarder?

Répondre

0

réponse est qu'il ne peut pas être fait. Le comportement que j'essaye de surcharger est implémenté par le composant win32 lui-même et wx ne fournit aucune méthode pour le faire .... sans passer par WX pour obtenir le handle win32 et en utilisant win32 api.

Vous devez écrire un nouveau composant dans l'API WX pour obtenir le comportement souhaité.

0

Je voudrais essayer ce code pour votre wxTextCtrl (mais je ne suis pas sûr que ce soit ce que vous voulez - se concentrer et cliquez sur)

m_textCtrl1->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(MyDialog1::LeftDown), NULL, this); 
m_textCtrl1->Connect(wxEVT_SET_FOCUS, wxFocusEventHandler(MyDialog1::SetFocus), NULL, this); 


void LeftDown(wxMouseEvent& event); 
void SetFocus(wxFocusEvent& event); 

Si ce que vous faites est remplacée par la valeur par défaut (système) gestionnaire de votre contrôle, vous pouvez essayer 'wxPostEvent' pour faire ce que vous voulez plus tard (après la gestion par défaut).

Je propose également d'utiliser un concepteur pour cela (pour cette question que j'ai gagné un code généré par wxFormBuilder)

Questions connexes