2 classes --> utiliser les memes objets;

Résolu
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 - 9 sept. 2005 à 23:47
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009 - 11 sept. 2005 à 22:26
Bonjour,

Je dev une appli qui contient 2 classes;
une classe de ma frame principale et une petite classe amie qui est un dialog, qui contient un event bouton.

le code :

////Dialog Style Start
#define THIS_DIALOG_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX | wxRESIZE_BORDER


#undef CommandDialog_STYLE
#define CommandDialog_STYLE wxCAPTION | wxMINIMIZE_BOX | wxCLOSE_BOX | wxOK
////Dialog Style End
/*
Frame
*/
class FTPclientFrm : public wxFrame
{
private:

DECLARE_EVENT_TABLE()

public: FTPclientFrm( wxWindow *parent, wxWindowID id 1, const wxString &title _T("FTPclient"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = THIS_DIALOG_STYLE);
~FTPclientFrm();
friend class CommandDialog;
////GUI Control Declaration Start
public :
wxFTP *ftp;
CommandDialog *m_comDialog;
public :
enum
{
////GUI Enum Control ID Start
ID_STCMD = 1031 ,
ID_COMDIALOG = 1030 ,,
////GUI Enum Control ID End


ID_DUMMY_VALUE_ //Dont Delete this DummyValue
}; //End of Enum;
void FTPclientFrmClose(wxCloseEvent &event);
void CreateGUIControls();
public :
void connect();
void result();
};
/*
Dialogue envoie de commandes
*/
class CommandDialog : public wxDialog
{
public: CommandDialog( wxWindow *parent, wxWindowID id 1, const wxString &title wxT("CommandDialog"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = CommandDialog_STYLE);
~CommandDialog();

wxButton *ButtonEnvoyer;
wxTextCtrl *EditCommand;
wxStaticText *StaticTextCommand;
private:
DECLARE_EVENT_TABLE()


public:
enum
{
////GUI Enum Control ID Start
ID_BUTTONENVOYER = 2003,
ID_EDITCOMMAND = 2002,
ID_COMMANDSTATICTEXT = 2001,
////GUI Enum Control ID End
ID_DUMMY_VALUE_ //Dont Delete this DummyValue
}; //End of Enum
void CommandDialogClose(wxCloseEvent& event);
void CreateGUIControls(void);
void envoyerClick(wxCommandEvent &event);
};

Voila, ben en fait, je veux utiliser le pointeur wxFTP *ftp; qui est initialisé dans une fonction membre de FTPclientFrm, dans CommandDialog.

Ou alors, ca me semble plus "développeur" d' appeller une fonction membre de FTPclientFrm à partir de la fonction envoyerClick(event); qui est membre de CommandDialog;

Donc, avec ce code j' arrive à utiliser des fonctions membres de CommandDialog à partir de FTPclientFrm mais pas à utiliser les fonctions de FTPclientFrm à partir de CommandDialog et l' inverse;


event.Merci();
@+;
ROOT_DIEU Alias satellite34

6 réponses

xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
11 sept. 2005 à 22:26
struct et class permettent de faire des objets en C++.

Tu dois passer au constructeur de CommandDialogue le pointeur de wxFTP créé à partir de ton objet frame. Cela te permet de partager le même objet wxFTP entre la frame et la boite de dialogue.

Maintenant, l'histoire d'appeller une fonction membre de frame à partir de ta boite de dialogue montre seulement un défaut dans la conception orientée objet de ton applicaiton. Divise ta classe frame pour te faciliter la tache et partage les différentes instances entre la frame et la boite de dialogue....

C'est Xterm, comme la console UNIX.
3
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
11 sept. 2005 à 08:20
Le pointeur est initialisé dans la classe dériviée wxFrame et utilisé dans la classe dérivée wxDialog.

Passe ce pointeur à l'instance dériviée de wxDialog par l'intermédiaire de son constructeur.

Je vois pas le probleme....
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
11 sept. 2005 à 14:59
bonjour,

désolé mais je ne saisi pas bien le :

"Passe ce pointeur à l'instance dériviée de wxDialog par l'intermédiaire de son constructeur"

ca revient à faire quoi???reconstruire l' objet dans wxDialog????
car si c'est ca, déja essayé et vu que ce n' est pas le meme objet mais un nouvo, ac ne marche pas, enfin , 0 erreurs de compile mais ma fonction travaille sur une autre instance que celle affichée a l' user..

Merci de préciser, je suis débutant !Et pas de support tel que livre ou autre (encore)


event.Merci();
@+;
ROOT_DIEU Alias satellite34
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
11 sept. 2005 à 21:47
Bonsoir,

Bon, je vais éclaircir mon affaire car c'est clair que c' est pas clair;lol;

donc, en premier lieu j' ai 2 classes(héhé);
1-->FTPclientFrm 2--->CommandDialog

CommandDialog est l' amie de FTPclientFrm, pour la création d' un dialog a partir d' un évenement de FTPclientFrm;Jusque la c' est ok;

J' ai une fonction membre de CommandDialog qui récupere une chaine de caracteres dans textCtrl :

wxString CommandDialog::command()
{
wxString cmd = EditCommand->GetValue();
return cmd;
}

C 'est la que je ne sais plus ou donner de la tetine :
Dans FTPclientFrm, j' ai une fonction membre qui envoi une commande ftp via un objet wxFTP *ftp en utilisant la fonction command() qui est membre de CommadDialog, ca ca marche bien :
void FTPclientFrm::send()
{
wxString com = m_comDialog->EditCommand->GetValue();
ftp->SendCommand(com);
result();
}

Dans CommandDialog il y a un bouton avec une fonction
void envoyerClick(wxCommandEvent &event);

De cette fonction, il faut que j' appelle send(); qui est membre de FTPclientFrm;
C' est ceci que je n' arrive pas a faire;

Est-ce que j' emploi la bonne méthode??Comment faire;àààà l' aideeeeee !


event.Merci();
@+;
ROOT_DIEU Alias satellite34
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
11 sept. 2005 à 21:54
struct CommandDialog
{
CommandDialog( wxFTP* ftp )
private:
wxFTP* ftp; // lien vers l'objet wxFtp initialisé dans FTPclientFrm.
}
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
11 sept. 2005 à 22:15
Alors la, vraiment je surnage pourquoi struct alors que j' ai déja une classe nommée CommandDialog???J' ai essayé quand meme de mettre dans ma classe CommandDialog :

CommandDialog( wxFTP* ftp )
private:
wxFTP* ftp; // lien vers l'objet wxFtp initialisé dans FTPclientFrm.

que j' utilise dans la fonction envoyerClick(wxCommandEvent& event);
ftp->SendCommand(command());
donc, ca plante, normal tu m' dira l' objet n' est pas créé mais si je fais un new, boum!, je suis plus sur le meme objet wxFTP;

Et puis, moi, ce que je veux faire, la, c'est utiliser une fonction membre de FTPclientFrm à partir de CommandDialog, pas utiliser un objet;

Quand on connai pas, Du code sans explications ca sert un peu à rien, je me doute que le temps est un précieux énnemi, mais bon, j' aurai préféré un peux d' expliks a la place d' un morceau de code;; erf, merci kan meme xther. mais la, je supernage;mdr

event.Merci();
@+;
ROOT_DIEU Alias satellite34
0
Rejoignez-nous