wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Problème de controle de saisie
Conversation : Problème de controle de saisie
13-09-2022 19:48:58  Problème de controle de saisie #1
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour, encore moi.
Je n'arrive pas à trouver une solution pour ce problème qui pourtant parait très simple

Code Cpp:

 
..........
GetDonneeA()         // un simple textControl
TransferDataFromWindow();
..........
if ( condition non réalisée )
   {
      Msg = _T ( "Erreur sur DonnéeA" );
      AffiMsg (Msg );
   }
.......
// Affichage d'un message
bool nsUtile::AffiMsg ( wxString & Msg ) throw()
{
   if ( wxYES == wxMessageBox ( Msg, wxEmptyString, wxOK, NULL ) )  return true;
   return false;
}
 

Après saisie d'une DonneA erronée le pgm boucle sur l'affichage du message d'erreur, alors que je voudrais modifier DonneA pour supprimer l'erreur.
J'ai essayé de créer un évenement sans succès.

Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
13-09-2022 20:45:57  Re: Problème de controle de saisie #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Je pense que l'on n'a pas assez de code pour voir d'où vient le problème.

Où se situe le début du code que tu donnes ?
Et à quoi sert le "return true/false" de ta fonction "AfficheMsg" si tu ne le testes pas ?

Mais le problème je pense est lié à ma première question : quand appelles-tu ce code ?

@+
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....
14-09-2022 21:58:21  Re: Problème de controle de saisie #3
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour et merci Xaviou.
Je saisis dans une fenêtre un paquet de données dont DonnéeA, puis j'effectue un transferfromwindows.
le message m'indique que DonnéeA est incorrecte, et l'affiche en boucle alors que je voudrais prendre la main après un seul affichage du message d'erreur pour modifier la valeur saisie pour DonneeA.
Je cherche le moyen de sortir de cette boucle.

Dans AffiMsg je demande seulement un RC pour effacer la fenêtre d'erreur.
Cette fonction a été très mal écrite il y a quinze quand je débutais, mais comme elle fait ce que je lui demande je n'y ai jamais touché depuis.
----------
Finalement c'est peut-être plus clair ci-dessous:

Code Cpp:

 
    // existence DonneeA
    do
       {
           GetDonneeA (); TransferDataFromWindow();
           FiDonneeA = _T ( "C:/Profil/" ) + m_DonneeA;
           wxTextFile FDonneeA( FiDonneeA );
           if ( FDonneeA.Exists () ) break;
           else
             {
                Msg = _T ( "DonneeA n'existe pas Corriger son nom puis <Valider>" );
                AffiMsg ( Msg );                 
              }
       }
    while ( 1 );
 

Dernière modification par Alfred83 (14-09-2022 23:16:29)


Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
15-09-2022 20:35:41  Re: Problème de controle de saisie #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Hello.

Il faut tout simplement que tu enlèves la boucle "do / while" : c'est elle qui pose problème.
Je m'explique : lorsque tu détectes que le fichier correspondant n'existe pas, tu affiches le message via une wxMessageBox qui t'empêche de modifier le contenu du wxTextCtrl.
Lorsque tu valides la wxMessageBox, la boucle va relire immédiatement le contenu du wxTextCtrl, et du coup le test donne le même résultat, c'est à dire l'affichage de la wxMessageBox.
Il faut juste qu'après "AfficheMsg(Msg)", tu sortes de la fonction dans laquelle tu es et que tu attendes que le contrôle wxTextCtrl soit modifié pour refaire le test.

Je ne sais pas si j'ai été bien clair : si ce n'est pas le cas, ne te gènes pas...

@+
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....
16-09-2022 10:33:07  Re: Problème de controle de saisie #5
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne
Merci, c'est clair.
Après avoir supprimé la boucle j'obtiens effectivement la main pour corriger DonneeA, je supprime donc l'affichage de mon message d'erreur.
Mais le pgm m'affiche un message d'erreur intempestif "can't open file ...", que Je ne peux pas laisser passer.
Y aurait-il un moyen pour:
    - surcharger ce msg d'erreur par un msg plus adapté ( "Corriger DonneeA puis <Valider>").
    - ou à la rigueur supprimer le message.
    - ou un autre moyen pour s'en sortir.

Code Cpp:

 
    // existence DonneeA
    GetDonneeA (); TransferDataFromWindow();
    FiDonneeA = _T ( "C:/Profil/" ) + m_DonneeA;
    wxTextFile FDonneeA( FiDonneeA );
 

Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
16-09-2022 21:03:47  Re: Problème de controle de saisie #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Je suppose que le code ci-dessus est appelé suite à un click bouton ou un truc du genre...
Le plus simple dans ce cas, c'est qu'après avoir affiché le message, tu fasses un "return" pour sortir de la fonction, et ne pas passer par la suite du code qui te donne actuellement un message d'erreur.

Code Cpp:

 
if ( condition non réalisée )
{
    Msg = _T ( "Erreur sur DonnéeA" );
    AffiMsg (Msg );
    return;
}
 

Sinon, tu mets la suite du code dans une condition :

Code Cpp:

 
GetDonneeA (); TransferDataFromWindow();
 
FiDonneeA = _T ( "C:/Profil/" ) + m_DonneeA;
wxTextFile FDonneeA( FiDonneeA );
 
if (!FDonneeA.Exists())
{
    Msg = _T ( "DonneeA n'existe pas Corriger son nom puis <Valider>" );
    AfficheMsg( Msg );
} else {
    // Code à éxécuter si le fichier existe
    ......
}
 
@+
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....
16-09-2022 22:06:50  Re: Problème de controle de saisie #7
Alfred83 (Membre)
Lieu: Toulon 83
Inscrit le : 28-12-2007
Messages: 50
Snippets: 0
Tutoriels: 0
Hors ligne
Bonsoir, merci Xaviou.
Effectivement ce bout de code arrive après l'appui sur un bouton <Valider>.
- la 1° méthode proposée boucle sur l'affichage du msg. (c'est ce que j'avais écrit initialement.)
- Je vais tester la seconde.
- Si cela ne colle pas je vais afficher un message pendant un temps limité sans demander de réponse à mon message d'erreur. C'est moins bon mais acceptable.
----------
Bonjour,
J'ai perdu un temps fou après l'apparition d'une erreur "could'nt create makefile.win I/O error 32", les fichiers du source étant passés en lecture seule. Je m'en suis sorti en récupérant une version archivée de mon code source.
----------
Bonjour,
J'ai perdu un temps fou à la suite d'une erreur "could'nt create .../makefile.win I/O error 32". Je m'en suis sorti en recréant un fichier source à partir d'une archive.
----------
Finalement je vais créer une fonction avec wxSingleChoiceDialog.
Malheureusement le compilateur n'accepte pas la déclaration suivante, et je ne trouve pas l'erreur!

Code Cpp:

 
#include <wx/arrstr.h>
namespace nsUtile
{  .....
wxString ChoixSimpleDansTableau ( wxArrayString Tableau [ ], wxString MsgCaption,
   wxString MsgInvite, wxString MsgFin );
   ....};
erreur: function 'ChoixSimpleDansTableau' is initialized like a variable.
 

Dernière modification par Alfred83 (23-09-2022 11:06:52)


Informaticien bénévole du "Groupement des Intellectuels Aveugles ou Amblyopes" à Toulon, qui publie les trois quarts des livres en braille en France.
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» Problème de controle de saisie