Visibilité de variables et fenêtre fille [+/-MFC] - C++ - Programmation
Marsh Posté le 04-03-2005 à 17:38:40
Access violation, c'est plutot que pDlg est un pointeur nul.
Modifier le parent depuis les enfants c'est pas une bonne idée. Pourquoi tu veux accéder à zEnv ? Si c'est pour le consulter pourquoi tu le passes pas en paramètre à ta fenêtre 2 ?
Marsh Posté le 05-03-2005 à 12:16:39
Pour résumer, la Fenêtre 2 sert à saisir les valeurs du membre de Fenêtre 1 de type CEnvironment.
Je n'avais pas penser créer un nouveau constructeur en passant le membre en paramètre. Je vais essayer ça.
Merci !
Ceci dit, mon appel à Fen2 se fait ainsi :
Code :
|
Je comprends donc pas que le pointeur puisse être nul...
Loïc
Marsh Posté le 05-03-2005 à 16:49:15
Je sais pas, c'est peut être ailleurs, mais access violation c'est une erreur à l'exécution non ? Le debuger te dit pas où elle a lieu cette erreur ?
Car "la variable (*pDlg).zEnv n'existe pas" je comprends pas trop ce que tu veux dire.
Marsh Posté le 05-03-2005 à 20:58:34
Oui, c'est l'erreur classique de l'accès à un pointeur nul.
Et ce que je comprends pas c'est pourquoi ce pointeur est nul alors que le membre zEnv est initialisé dans la Fenêtre1.
Loïc
Marsh Posté le 07-03-2005 à 17:56:50
lolobreizh a écrit : Pour résumer, la Fenêtre 2 sert à saisir les valeurs du membre de Fenêtre 1 de type CEnvironment. |
Ca ne répondra pas au "pourquoi" de la question, mais te permettra peut-être de passer outre ton problème...
Si tu appelles Fen2 a partir de Fen1 pour initialiser l'un de ses membres (donc zEnv) tu devrais peut-être mieux récupérer tes données a la fin de l'appel Fen2. Donc pas de manipulation de pointeur et, d'après moi, un plus grand respect de l'encapsulation objet.
Cela te donnerait un appel du genre :
Code :
|
Marsh Posté le 07-03-2005 à 19:10:40
Il me semblait que lorsque DoModal() est finie (ce qui est le cas quand on atteint le test [if( nRet == IDOK )] ), les champs de Dlg ne sont plus accessibles.
Je me trompe ?
Ceci résoudrait en effet le problème.
Sinon, j'ai contourné le problème en déclarant zEnv comme membre de la classe Application. Mais c'est pas très élégant.
Merci pour votre aide à tous.
Loïc
Marsh Posté le 07-03-2005 à 19:24:37
Les champs ne sont plus accessible sous leur forme "éléments d'interface", je veux dire par là qu'on n'a plus accés aux pointeurs vers les LineEdit, ListCtrl, etc...
Mais il y un mécanisme qui garde la correspondance entre les éléments d'IU et les membres que tu cherche à lire c-a-d QString dans ton cas (mais ça peut être des int ou tout autre type de données).
Ca fait longtemps que j'ai pas touché les MFC, j'ai vu la lumière avec Qt . Je cherche donc le lien et je poste...
++
Marsh Posté le 07-03-2005 à 19:32:56
et voilou je pense que tout les détails sont là :
http://c.developpez.com/faq/vc/?page=DoDataExchange
Marsh Posté le 04-03-2005 à 17:23:25
Bonjour,
Je cherche à récupérer un membre d'une fenêtre dans sa fenêtre fille. Sauf que ça marche pas comme je voudrais.
La fenêtre parent Fen1 a un membre zEnv du type :
Ce membre est initialisé dans le constructeur de Fen1 :
Quand je récupère le pointeur vers Fen1 dans Fen2 comme le dit la faq :
Mais la variable (*pDlg).zEnv n'existe pas. (Access Violation) :
Si vous avez une explication et comment je peux faire, ça m'aiderait beaucoup. Merci d'avance.
Cordialement,
Loïc