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 :

TextBox avec plusieurs Windows Form


Sujet :

C++/CLI

  1. #1
    Membre averti
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Par d�faut TextBox avec plusieurs Windows Form
    Salut � tous,

    J'ai une interface ou j'ai plusieurs textbox et je r�cup�re leur valeur dans une fonction dans class Form2.
    Cependant vu que j'aurais les m�mes textbox dans plusieurs interfaces j'aurais voulu faire une fonction g�n�rique qui r�cup�re les donn�es selon l'interface utilis�.

    Dans form2.cpp
    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
    String^Form2::valeur_limites()
    {
    	String^ min_ab;  String^ max_ab; String^ pas_ab; String^ min_or; String^ max_or; String^ pas_or;
    	String^ total;
     
     
    	min_ab=textBox_min_ab->Text->ToString();		
    	max_ab=textBox_max_ab->Text->ToString();
    	pas_ab=textBox_pas_ab->Text->ToString();
    	min_or=textBox_min_or->Text->ToString();
    	max_or=textBox_max_or->Text->ToString();
    	pas_or=textBox_pas_or->Text->ToString();
    	total="x"+" "+min_ab+" "+max_ab+" "+pas_ab+" "+min_or+" "+max_or+" "+pas_or+" ";
     
    	return total;
    }
    Dans communication.cpp : (l� o� sont mes fonctions g�n�riques)
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    int* Limites()
    {
    	
    	Form2 gForm2;
    	String^limites;
    	char* lim;
    	if (type_gene==0)
    	{
    		//on r�cup�re les donn�es de l'interface teleview
    	}
    	if (type_gene==1)
    	{
    		//on r�cup�re les donn�es de l'interface dektek
    		limites=gForm2.valeur_limites();
    	}
    	//convertit un string en char
    	lim= (char*)(void*)Marshal::StringToHGlobalAnsi(limites);
    
    	char* pt=lim;	static char argv[32][32];	char* pargv[7];
    					
    	//on d�cortique la chaine total pour avoir les valeurs des limites
    	int i = 0;		
    	int num[6];
    	while (true)
    	{
    		pt = strstr(lim, " ");		// find space
    		if (pt == 0)				// space not find
    		{
    			strcpy(argv[i++], lim);	// last command
    			break;					// end of cmd
    		}
    		*pt = 0;					// end of string
    		strcpy(argv[i++], lim);		// one command
    		pargv[i] = &argv[i][0];		// init pointer
    
    		*pt++;						// next command
    		strcpy(lim, pt);			// erase previous command
    	}			
    	// on convertit les char en int
    	num[0] = atoi(pargv[1]); // freq min -> Abcisse Min
    	num[1] = atoi(pargv[2]); // freq max -> Abscisse Max
    	num[2] = atoi(pargv[3]); // pas freq -> Abcisse Pas
    	num[3] = atoi(pargv[4]); // niveau min -> Ordonn�e Min
    	num[4] = atoi(pargv[5]); // niveau max -> Ordonn�e Max
    	num[5] = atoi(pargv[6]); // pas niveau -> Ordonn�e Pas
    
    	return num;
    
    }
    Le soucis lorsque j�ex�cute c'est que dans les variables qui r�cup�rent les valeurs (min-ab, max_ab...), sont vides (leurs valeurs: "").

    Je ne comprend absolument pas pourquoi.
    Quelqu'un a une id�e?

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    D�tails du profil
    Informations personnelles :
    �ge : 59
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Par d�faut
    int* Limites()
    {

    Form2 gForm2;
    ...
    gForm2 n'est pas affich�e (Load, Show, ou je ne sais quoi) ?
    Du coup, les textboxes ne sont pas initialis�s ...

    (... cela dit, moi c'est plutot C#, alors C++... )
    (... par ailleurs, cr�er une chaine pour la red�composer ensuite, il y a peut �tre plus simple... )

  3. #3
    Membre averti
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Par d�faut
    Citation Envoy� par Alikendarfen Voir le message
    gForm2 n'est pas affich�e (Load, Show, ou je ne sais quoi) ?
    Du coup, les textboxes ne sont pas initialis�s ...
    Je suis pas s�re de comprendre ... Ma form2 est ouverte et les textbox ont �t� remplies pourtant


    (... par ailleurs, cr�er une chaine pour la red�composer ensuite, il y a peut �tre plus simple... )
    Vous avez surement raison mais pour l'instant j'ai trouv� que cette solution, je ne me suis pas attard� dessus. Peut-�tre une fois mon programme fini je m'y pencherai � nouveau dessus.

  4. #4
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    D�tails du profil
    Informations personnelles :
    �ge : 59
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Par d�faut
    Je suis pas s�re de comprendre ... Ma form2 est ouverte et les textbox ont �t� remplies pourtant
    Peut �tre. Mais si c'est bien la 'gForm2' qui est d�clar�e dans la fonction 'Limites', �a veut dire qu'elle s'affiche et vous laisse le temps de saisir les param�tres d�s sa d�claration (�a n'est pas habituel, sauf � ce que vous ayez d�fini des choses particuli�res dans son constructeur ?).

    Pour le voir, �a peut �tre simple : mettre un point d'arr�t sur la d�claration de gForm2, avancer d'un pas et voir si elle s'affiche � ce moment l� et qu'elle est modale (un dialogue).
    Edit : Attention, dans cette situation, si elle n'est pas modale le code va se poursuivre sans interruption et du coup vous allez r�cup�rer les valeurs des champs avant de les avoir saisis.

    Si c'est pas le cas, alors vous avez probablement une autre fen�tre de la m�me classe ouverte quelque part.

    Mais du coup, la fonction 'Limites' va chercher les valeurs dans gForm2 et non pas dans la fen�tre qui est ouverte � l'�cran...

    Testez �a et dites nous !

  5. #5
    Membre averti
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Par d�faut
    Ah oui d'accord j'ai compris ^^

    Je vais essayer de tester �a dans la matin�e !

    Merci.

  6. #6
    Membre averti
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Par d�faut
    C'est exactement ce que vous m'avez dit. Enfaite j'instancie a nouveau ma form2.

    Mais du coup comment puis-je faire pour utiliser la form2 d�j� initialis�e?

  7. #7
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    D�tails du profil
    Informations personnelles :
    �ge : 59
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Par d�faut
    Il faut la passer en param�tre � ta fonction 'Limites' (et non plus la d�clarer dans cette fonction).

    Par contre, il te faut un �v�nement pour lancer l'appel � cette fonction : en g�n�ral cet �v�nement est li� au fait que l'utilisateur aura appuy� sur un bouton de la forme pour indiquer qu'il a saisi les valeurs limites dans les textboxes.

  8. #8
    Membre averti
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Par d�faut
    Ok je vois.

    Cependant je n'arrive pas a mettre une windows form en param�tre. Quelle est la syntaxe ?

    j'ai essay�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int* Limites(System::Windows::Forms::Form form)
    Mais je ne suis pas certaine que �a soit �a, surtout qu'apr�s le nom du param�tre � passer dans l'utilisation de la fonction ... je ne vois pas non plus quoi mettre.

    C'est la derni�re aide que je demande apr�s je vous casse plus les pieds ^^

  9. #9
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    D�tails du profil
    Informations personnelles :
    �ge : 59
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Par d�faut
    C'est la derni�re aide que je demande apr�s je vous casse plus les pieds ^^
    Vous ne cassez les pieds � personne : chacun est libre de r�pondre ou pas !

    Je pense que votre probl�me vient des notions qui tournent autour des passages de param�tres par valeur ou bien par r�f�rence.

    En c++, trois fa�ons de faire (sans aller chercher midi � 14h, car il peut y avoir des 'astuces' plus compliqu�es mais �a n'est pas le sujet) :

    Note : je peux me tromper un peu car �a fait longtemps que je ne fais plus de c++. Mais les principes g�n�raux sont l�.

    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
     
    1/ Passage par valeur
    Déclaration :
         void fonction( Form form );
    Appel :
         Form x;
         fonction( x );
     
    2/ Passage par référence
    Déclaration :
         void fonction( Form &form );
    Appel :
         Form x;
         fonction( x );
     
    3/ Passage par adresse (pointeur)
    Déclaration :
         void fonction( Form *form );
    Appel :
         Form x;
         fonction( &x );
    Cas 1/
    Lors de l'appel une copie de la forme est transmise � la fonction. Cet appel n�cessite que Form ait un constructeur de copie : Form( Form &form).
    Normalement, �a n'est pas le cas d'une Form (� v�rifier, mais de toute fa�on �a n'est pas la bonne solution ici).

    Cas 2/
    Lors de l'appel c'est en fait la forme de la fonction appelante qui est transmise � la fonction appel�e sans copie ni rien (c'est un peu comme pour le passage par adresse au final, mais c'est dans l'esprit des 'var' ou 'ref' qu'on trouve dans d'autres langages).

    Cas 3/
    On passe l'adresse de la forme (l'adresse est en fait pass�e par valeur) et du coup, � l'int�rieur de la fonction appel�e on acc�de � la forme d'origine depuis son adresse


    Pour votre probl�me :
    - On doit partir de la forme o� l'utilisateur saisit les valeurs et traiter une �v�nement sur cette forme (appui sur un bouton)
    - Depuis l'�v�nement qui est une m�thode de la forme (en g�n�ral), la forme s'appelle 'this' qui est de type 'Form *'
    - Votre fonction 'Limites' peut donc avoir comme signature :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int *Limites( Form *pForm );
    Auquel cas, vous l'appellez par : ou

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int *Limites( Form &form );
    Et vous l'appelez par : Je pr�conise cette derni�re solution (avec 'Form &form') car il vaut mieux utiliser les pointeurs seulement l� o� c'est vraiment utile.

    En esp�rant que �a vous aide.

    bon courage

  10. #10
    Membre averti
    Femme Profil pro
    �tudiant
    Inscrit en
    Mars 2011
    Messages
    30
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Par d�faut
    Merci pour cette r�ponse, j'ai pu mettre la windows form en param�tre avec

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int *Limites( Form^form );
    et l'appel se fait par:
    Mais enfaite �a va plus du tout, parce que j'ai acces qu'� une windows form quelque conque j'ai l''impression.
    et si je fais :

    et l'appel se fait par:
    voici l'erreur :
    Form1.cpp(2455) : error C2664: 'Limites'*: impossible de convertir le param�tre 1 de 'Commande_Generateur2::Form1' en 'System::Windows::Forms::Form ^'
    Enfaite ma form1 est d�clar� dans le namespace Commande_Generateur2.
    Et du coup je suis perdue, je comprends plus grand chose

    Je crois que malheureusement je vais abandonner de faire cette fonction. et je vais r�cup�rer les valeurs dans chaque form et puis voil� ! Tant pis !

    En tout cas, merci beaucoup du temps que vous avez accord� � mon probl�me et pour r�ponse.

  11. #11
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    D�tails du profil
    Informations personnelles :
    �ge : 59
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Par d�faut
    OK.
    Effectivement, le plus simple sera sans doute de faire le tableau de int dans chaque forme (sans chercher une repr�sentation texte interm�diaire).

    De plus �a vous permet de cr�er (plus tard) d'autres types de formes sans avoir � modifier tout le temps cette fonction Limites.

    Allez, bon courage

  12. #12
    Membre chevronn�
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    415
    D�tails du profil
    Informations personnelles :
    �ge : 59
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 415
    Par d�faut
    Ah sinon, j'ai regard� cette histoire de '^' que je ne connaissais pas et qui est propre au c++ dotnet (mon historique c'est c++ avant dotnet et c# apr�s).

    ^ : C'est des pointeurs manag�s (garbag�s par le framework).

    Donc pour ce qu'on disait avant : effectivement il faut Limites( this ) � l'appel et int *Limites( Form2^ form ) comme signature.

    Mais encore une fois, il est plus simple de cr�er le tableau int * directement dans la forme...

Discussions similaires

  1. Tutoriel pour d�buter rapidement avec les Windows.Forms ?
    Par Leelith dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 03/12/2008, 14h25
  2. Enregistrement avec deux windows form
    Par ApprentiDeveloppeur dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 01/09/2008, 13h46
  3. Manipuler des XML en c# avec un windows form
    Par Courgette17 dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 19/05/2008, 18h37
  4. [c#][.NET][CF] TextBox avec plusieurs fonts et styles.
    Par safisoft13 dans le forum Windows Mobile
    R�ponses: 4
    Dernier message: 08/02/2007, 15h37
  5. [C#] Look and Feel Office 2003 avec les Windows Forms
    Par vandamme dans le forum Windows Forms
    R�ponses: 7
    Dernier message: 20/01/2006, 00h18

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