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 :

R�f�rence d'objet et instance (visual C++ EXpress)


Sujet :

C++/CLI

  1. #1
    Membre � l'essai
    Inscrit en
    Ao�t 2012
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2012
    Messages : 5
    Par d�faut R�f�rence d'objet et instance (visual C++ EXpress)
    Bonjour � tous !

    Je r�alise un petit programme dans lequel j'ai un tabControl avec plusieurs Tabs dont chacun contient un dataGridView.

    D�clar�s comme suit :
    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
     
     
    public:
     
    		array<System::Windows::Forms::TabPage ^> ^ MyTab;
    		array<System::Windows::Forms::DataGridView^> ^ MyDataG;
     
    private: System::Windows::Forms::DataGridView^  dataGridView1;
    ...
    private: System::Windows::Forms::DataGridView^  dataGridView30;
     
    private: System::Windows::Forms::TabControl^  tabControl1;
     
    private: System::Windows::Forms::TabPage^  tabPage1;
    ...
    private: System::Windows::Forms::TabPage^  tabPage30;
    initialis� comme suit :

    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
     
    DataProc(void)
    		{
    			InitializeComponent();
    			//
    			//TODO*: ajoutez ici le code du constructeur
    			//
    			MyDepotProc = gcnew array<DepotProc ^>(256);
    			DepotProc^ T = gcnew DepotProc();
    			for(int p = 0; p<=255; p++){MyDepotProc[p] = T;};
     
     
    	  MyTab = gcnew array<System::Windows::Forms::TabPage ^>(30);
    	  MyDataG = gcnew array<System::Windows::Forms::DataGridView ^>(30);
     
    MyTab[0] = tabPage1;
    ...
    MyTab[29] = tabPage30;
     
    MyDataG[0] = dataGridView1;
    ...
    MyDataG[29] = dataGridView30;
    Dans une de mes fonctions j'it�re sur mes Tab (et DatagridView) :

    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
     
    if(this->MyDataG[k]->RowCount != 0)
    	{
    		for(int y = 0; y<= this->MyDataG[k]->RowCount-1 ; y++)
    		{
    			String^ DATE1 = this->MyDataG[k]->Rows[y]->Cells[2]->Value->ToString();
     
    	...
     
    			String^ DATE2;
     
    			if( !String::IsNullOrEmpty( (this->MyDataG[k])->Rows[y]->Cells[3]->Value->ToString()))
    			{ 
    				DATE2 = (this->MyDataG[k])->Rows[y]->Cells[3]->Value->ToString();
    			}
    			else
    			{
    				DATE2 = "01/01/1980";
    			}
     
    			...
    Et l� j'ai le message d'erreur (la r�f�rence d'objet n'est pas d�finie � une instance d'un objet) pour la ligne avec le IsNullOrEmpty !!!?!

    Je ne comprend pas pourquoi d'autant plus qu'en debug si l'�tape est "ignor�e" les donn�es sont correctement utilis�es .

    Un petit id�e ? une remarque ??

    MERCI !

  2. #2
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    (this->MyDataG[k])->Rows[y]->Cells[3]->Value->ToString()
    Avec une instruction pareille �a ne m'�tonne pas.
    Tu es s�r qu'il existe un k-i�me �l�ment pour MyDataG, un y-i�me �l�ment pour Rows, etc ?

  3. #3
    Membre � l'essai
    Inscrit en
    Ao�t 2012
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2012
    Messages : 5
    Par d�faut
    C'est vrai que �a fait un peu barbare mais je n'ai rien trouv� d'autre...( je prends tous les conseils !)

    au d�bug �a plante pour k=0 et y=0 or dans le constructeur j'ai bien :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    MyDataG[0] = dataGridView1;
    et pour Rows[y] �a ne lui pose pas de probl�me lorsque je fais :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    String^ DATE1 = this->MyDataG[k]->Rows[y]->Cells[2]->Value->ToString();
    Mais �a lui en pose un quand justement je test la valeur en faisant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    if( !String::IsNullOrEmpty( (this->MyDataG[k])->Rows[y]->Cells[3]->Value->ToString()))
    			{ 
    				DATE2 = (this->MyDataG[k])->Rows[y]->Cells[3]->Value->ToString();
    			}
    C'est l� o� je ne comprends plus !

  4. #4
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    � priori, c'est parce que cells[3] n'est pas d�fini, quand cells[2] l'est.

    C'est la seule diff�rence que je vois.

    Cela dit, je n'aime pas ce style de this->truc[]->truc[]->truc
    je pr�fererai d�j� des classes mieux d�finies
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    String^ DATE1 = this->MyDataG[k]->Rows[y]->Cells[2]->Value->ToString();
    devrait ressembler �
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    String^ DATE1 = get(k,y,2).stringValue();
    Si c'est ta librairie, je te recommande chaleureusement de la retravailler un peu.

    Si tu es contraint de l'utiliser sans en �tre l'auteur, je te plaints.
    Et quel est ce type �trange "String^"?

  5. #5
    Membre � l'essai
    Inscrit en
    Ao�t 2012
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2012
    Messages : 5
    Par d�faut
    Alors je suis effectivement � plaindre.... Et tout � fait d'accord que c'est la cause la plus probable.

    Cependant encore une chose qui me d�range,

    Si je ne dis pas (trop) de conn***, et dans d'autre prog que j'ai fais �a fonctionnait comme �a, le dataGridView g�re ses cellules.

    C'est � dire qu'en ex�cution lors qu'on �crit dans le dataGridView il cr�er sa ligne et les cellules qu'elle contient.

    Or, lorsque je rentre des donn�es (en respectant le type) dans toutes les cellules, i.e. cells[2] et cells[3] �a ne fonctionne pas (enfin comme je le disait au d�but il me retrouve par la suite les infos quand m�me).

    Pourtant ces deux cellules sont cr�es en m�me temps, de la m�me mani�re et par une classe (normalement) �prouv�e...

  6. #6
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Bonjour,

    Il s'agit de C++/CLI, la notation ^ pour les pointeurs manag�s.
    Par contre nommer les champs XXX1...XXX30 etc, c'est limite..
    et le code de mani�re g�n�rale est discutable
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    (this->MyDataG[k])->Rows[y]
    parenth�ses inutiles; this est-il obligatoire en CLI ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if(this->MyDataG[k]->RowCount != 0)
    ce test est-il utile ? �tant donn� que tu boucles de toutes fa�ons de 0 � RowCount-1... si RowCount est nul, tu boucles pas; n'y a-t-il pas un risque que RowCount soit < 0 ?

    Quel est ton probl�me ? �a crash ?
    Vue les boucles, red�finis tes bornes et vas-y pas-�-pas, tu te rendras compte assez vite d'o� se situe le probl�me.

    btw, on pr�f�re g�n�ralement faire for (i = 0; i < n; ++i) que (i = 0; i <= n-1; ++i), �a fait une op�ration de moins � chaque tour (au moins, je ne sais pas sp�cifiquement comment se comporte un < par rapport � un <=)

    Le code que tu pr�sentes n'est de toutes fa�ons pas sp�cialement probant � montrer/d�celer une erreur. Il convient de pr�senter sur le forum un code �pur�, mais qui reste lisible et duquel on puisse suivre la logique.
    L� on a au mieux des bribes.
    MyDepotProc que l'on d�couvre dans une m�thode apparement globale, mais qui doit en fait appartenir � "la classe sans nom", o� chaque �l�ment de MyDepotProc est... un unique �lement (cool un tableau de 256 occurences du m�me �l�ment). etc
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

Discussions similaires

  1. [D�butant] R�f�rence d'objet et instance (visual C++ EXpress)
    Par Falckounet dans le forum Visual Studio
    R�ponses: 0
    Dernier message: 01/08/2012, 12h10
  2. R�ponses: 2
    Dernier message: 05/06/2007, 17h22
  3. R�ponses: 8
    Dernier message: 04/06/2007, 16h20
  4. R�ponses: 24
    Dernier message: 01/06/2007, 09h26
  5. R�ponses: 8
    Dernier message: 11/07/2006, 17h27

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