IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

C++/CLI récupérer les données d'une textBox


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut C++/CLI récupérer les données d'une textBox
    Bonjour,

    Je butte sur un truc qui, je pense, doit être ultra simple.

    J'ai une forme avec des dizaines de textBoxes qui servent à faire de la saisie de données.

    Je veux ne saisir les données qu'au moment où l'utilisateur presse la touche "Entrée" ou clique sur une autre textBox ...

    J'arrive facilement à faire l'un ou l'autre (mais pas les deux!!) en utilisant soit l'évènement KeyUp et en testant que c'est la touche "Entrée" qui a été utilisée, soit en utilisant l'évènement "Leave" quand l'utilisateur clique dans un autre champ..

    Vu qu'à chaque textBox est associé un bout de code spécifique, je ne veux pas dupliquer ce code dans 2 évènements ...

    N'y a t-il une manière de dire que la touche "Entrée" équivaut à "Leave" ou un truc de ce genre?

    Je suis sûr qu'il y a une solution bête pour faire ça ... Mais je ne trouve pas.

    Bonne soirée

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    C'est quoi comme formulaire ?
    Un formulaire simple, non modal, ou une boite de dialogue ?
    Quelle technologies ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour,

    C'est une Form simple faite avec Visual ..

    Elle contient une dizaine d'onglets et dans ces onglets il y a une flopée de textBoxes dans lesquelles l'utilisateur peut changer des valeurs.

    Disons que cela ressemble plus ou moins à une page Excel.

    J'ai 2 versions :
    - une où on presse "enter" pour valider
    - une où on clique dans un autre champ pour valider

    J'aimerais juste une version où les 2 fonctionnent ..

    Je me suis amusé à mettre 2 évènements sur une textBox (keyup et leave) of course ça marche mais s'il faut faire ça sur chaque textBox çele devient lourdingue.

    Je pense qu'on doit pouvoir faire plus simple.

    Bonne journée

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    "Form simple faite avec Visual ", il y a au moins 5 ou 6 manières de faire un formulaire en VC++, sans compter la manière d'afficher ce formulaire.

    Mais, sur le fond, j'ai du mal à comprendre que le OnLostFocus d'un contrôle ait le même comportement qu'une validation de formulaire avec le bouton "Enter".

    L'un devrait ne contrôler que le contenu du contrôle, l'autre, toutes les valeurs d'un formulaire. L'un devrait mettre en place un feedback visuel sur la validité d'un contenu, l'autre, autoriser ou interdir la fermeture/sauvegarde des données éditées.

    Pour un traitement commun à tous ces contrôles, le plus naturel est la création d'une classe dérivée du contrôle, mais il faut mettre en place toute la mécanique pour mettre en place l'intégration de la classe dérivé dans la toolbox de VS. On peut faire Quick and Dirty en faisant un FindAndReplace sur le code généré par le Designer, mais après cette opération, plus de WYSIWIG.

    Comme, pour moi, chaque OnLostFocus devrait être spécifique car lié aux donnés du contrôle, je ne vois pas l'intérêt de ce traitement "standardisé".

    Mais il y a toujours la solution de liste les contrôles d'un formulaire, de les caster en un type recherché (TestBox par exemple) et d'ajouter le listeneur d'event. A faire après le code généré par le Designer.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    C'est une forme faite de façon la plus simple ...

    J'ai ouvert Visual ... j'ai créé une Winform ... J'ai mis un Tabcontrol (onglets) ... Puis des textBox ...

    C'est un vieux programme de l'époque où je ne connaissais strictement rien ( j'en connais guère plus aujourd'hui! )

    Le programme a grossi en désordre et les textBox se sont multipliées au cours du temps et je n'ai pas envie de tout remettre à plat pour faire plus propre.

    Voici un exemple allégé d'un évènement Leave sur une série de textBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    private: System::Void cur_Afficheur_Leave(System::Object^  sender, System::EventArgs^  e) 
    {
       TextBox^ t = safe_cast<TextBox^>(sender);
       int i = t-> TabIndex;
       try
      {
    	double valeur = Convert::ToDouble (t->Text);
    	if (i<100)		volume [i]    = valeur;
    	if (i > 99 && i < 200)	        area [i-100] = valeur;
    	if (i > 199 && i < 300)	
    	{ 
    		wetted_area [i-200] = valeur;
    		Wall_display();
    	}
    	if (i > 299 && i < 400)	wall_mass [i-300] = valeur;
    	if (i > 399 && i < 500)	p_loss [i-400]       = valeur;
    	if (i > 499 && i < 600)	h_coef [i-500]       = valeur;
    	}
    	catch (...)  {}//   reset if wrong value entered
    	Write_data();
    }
    Je peux faire la même chose avec l'évènement "Enter"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private: System::Void cur_Afficheur_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) 
    {
            if (e->KeyCode == Keys::Enter)
    	{
    	      TextBox^ t = safe_cast<TextBox^>(sender);
    	       int i = t-> TabIndex;
     
    .
    .
    .
    Ce que j'aimerais faire c'est que les deux évènements déclenchent la même chose.

    On fait bien ça quand on utilise les raccourcis clavier du genre presser "Alt + F" au lieu de cliquer sur "Fichier" ..

    Je ne sais pas comment on fait ça, y a t'il deux évènements ?

    Bonne journée

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    C'est une forme faite de façon la plus simple ...

    J'ai ouvert Visual ... j'ai créé une Winform ... J'ai mis un Tabcontrol (onglets) ... Puis des textBox ...
    C'est donc une WinForms, pour vous c'est évident, pas pour nous qui connaissons bien d'autre moyens simple de faire des formulaires.

    Le programme a grossi en désordre et les textBox se sont multipliées au cours du temps et je n'ai pas envie de tout remettre à plat pour faire plus propre.
    Vous voulez mes chaussures de ski alpin pour vous bottez les fesses ?

    Vous faites ça à l'arrache, c'est normal que vous noyez à force de ramer à contre-courant.

    Si vous aviez pris la peine d'architecturer votre application (Document/Vue, MVC, le DP Commande ...), vous n'auriez pas ce type de dilem.

    Comme on ne sait pas où vous êtes et où vous voulez vous perdre, on ne peut que vous donnes d'autres cordes pour vous pendre.

    Vous faite en sorte que "cur_Afficheur_KeyUp" appele "cur_Afficheur_Leave".

    Pour le cablage des events, je m'auto-cite :
    Mais il y a toujours la solution de lister les contrôles d'un formulaire, de les caster en un type recherché (TestBox par exemple) et d'ajouter le listeneur d'event. A faire après le code généré par le Designer.
    Mais le résultat est un truc infâme sans aucune abstraction.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour et merci...

    J'accepte volontiers votre remarque, je ne suis pas programmeur professionnel ..
    Je mets juste des phénomènes physiques en équation et assez souvent je construis des bouts de programme sur le coin d'une table pour démontrer une chose ou une autre .. puis je rajoute des verrues pour autre chose.

    Bonne soirée

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour et merci...

    J'accepte volontiers votre remarque, je ne suis pas programmeur professionnel ..
    Je mets juste des phénomènes physiques en équation et assez souvent je construis des bouts de programme sur le coin d'une table pour démontrer une chose ou une autre .. puis je rajoute des verrues pour autre chose.

    Les textBoxes étaient originellement ReadOnly, puis sont devenues des zones de saisie ...

    Bonne soirée

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Je sais, je suis chiant.

    Mais j'avais quand même donné un début de solution :
    Vous faite en sorte que "cur_Afficheur_KeyUp" appele "cur_Afficheur_Leave".

    Pour le cablage des events, je m'auto-cite :

    Citation:
    Mais il y a toujours la solution de lister les contrôles d'un formulaire, de les caster en un type recherché (TestBox par exemple) et d'ajouter le listeneur d'event. A faire après le code généré par le Designer.
    Concrètement, c'est d'utiliser la Propriété "Controls" du formulaire ( http://msdn.microsoft.com/fr-fr/libr...v=vs.110).aspx ) pour lister ces contrôles et leur attacher les handlers d'événement "cur_Afficheur_KeyUp" et "cur_Afficheur_Leave".

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/09/2006, 14h41
  2. récupérer les données d'une fenetre
    Par snoopo dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 23/06/2006, 17h23
  3. Réponses: 15
    Dernier message: 20/06/2006, 10h29
  4. Récupérer les données après une recherche
    Par cdumas dans le forum Access
    Réponses: 7
    Dernier message: 04/05/2006, 12h09
  5. Récupérer les données d'une iframe
    Par juli1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 22h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo