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

Visual C++ Discussion :

Erreur C2352 et évènements


Sujet :

Visual C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Points : 64
    Points
    64
    Par défaut Erreur C2352 et évènements
    Bonjour à tous,

    j'ai récemment migrer de C++Builder 6 à Visual Studio 2005.
    La gestion des évènements est différente mais le problème n'est pas là.

    Dans le header de ma form (d'une Windows Forms Application), mes évènements sont bien en private etc....
    Lorsque je veux appeler une fonction à l'intérieur d'un évènement, l'erreur C2352 (illegal call of non-static member function
    ) fait son apparition à l'appel de fonctions non statiques.

    Autrement dit : je ne peux pas appeler de fonctions non statiques à l'intérieur de ma class Form.

    Voici le code mon Form1.h.
    La ligne où se produit l'erreur est l'appel du drawline.

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    #pragma once
     
     
    namespace TEST {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
     
    	/// <summary>
    	/// Summary for Form1
    	///
    	/// WARNING: If you change the name of this class, you will need to change the
    	///          'Resource File Name' property for the managed resource compiler tool
    	///          associated with all .resx files this class depends on.  Otherwise,
    	///          the designers will not be able to interact properly with localized
    	///          resources associated with this form.
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Add the constructor code here
    			//
    		}
     
    	protected:
    		/// <summary>
    		/// Clean up any resources being used.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
     
    	protected: 
    	private: System::Windows::Forms::Button^  button1;
    	private: System::Windows::Forms::PictureBox^  pictureBox1;
     
    	private:
    		/// <summary>
    		/// Required designer variable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
     
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Required method for Designer support - do not modify
    		/// the contents of this method with the code editor.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->button1 = (gcnew System::Windows::Forms::Button());
    			this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->BeginInit();
    			this->SuspendLayout();
    			// 
    			// button1
    			// 
    			this->button1->BackColor = System::Drawing::SystemColors::ActiveBorder;
    			this->button1->ForeColor = System::Drawing::SystemColors::ButtonShadow;
    			this->button1->Location = System::Drawing::Point(118, 32);
    			this->button1->Name = L"button1";
    			this->button1->RightToLeft = System::Windows::Forms::RightToLeft::No;
    			this->button1->Size = System::Drawing::Size(60, 26);
    			this->button1->TabIndex = 1;
    			this->button1->Text = L"button1";
    			this->button1->UseVisualStyleBackColor = false;
    			this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
    			// 
    			// pictureBox1
    			// 
    			this->pictureBox1->Location = System::Drawing::Point(43, 88);
    			this->pictureBox1->Name = L"pictureBox1";
    			this->pictureBox1->Size = System::Drawing::Size(209, 159);
    			this->pictureBox1->TabIndex = 2;
    			this->pictureBox1->TabStop = false;
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(292, 273);
    			this->Controls->Add(this->pictureBox1);
    			this->Controls->Add(this->button1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->EndInit();
    			this->ResumeLayout(false);
     
    		}
    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				 this->Opacity = 0.5;	
    				 this->pictureBox1->Image = this->pictureBox1->Image->FromFile(System::IO::Directory::GetCurrentDirectory() + "\\Image1.bmp");
    				 TEST::Pen ^aPen = TEST::Pen(TEST::Color::AliceBlue);
    				 // ERREUR //
    				 TEST::Drawing::Graphics::DrawLine(aPen, 5,5, 40,40);
    			 }
    	};
    }
    Questions :

    - Dans les évènements, on doit bien pouvoir appeler n'importe quelle fonction qu'elle soit statique ou non (ou comment résoudre ce problème ?

    - Et est-ce que dans le header de la form on peut appeler des fonctions externes que l'on a codé ? ( ex : Fonctions.h -> dans le Form1.h : #include "Fonctions.h" -> utilisation de fonctions dans les évènements de Form1.h provenant de Fonctions.h)

    J'espère que j'ai été assez clair .

    Merci à vous

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    drawline n'est pas static, il faut récupérer une instance de graphics

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Points : 64
    Points
    64
    Par défaut
    Et l'instantation doit se faire de quelle manière?
    J'ai essayé comme tel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    {
     
        System::Drawing::Graphics ^pGraf = System::Drawing::Graphics::FromHdc(Form1::Handle);
     
    }
    Mais bien évidemment il y a une erreur...
    Si tu as une solution bien à toi si tu pouvais me la dire

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    quelle erreur ?

    handle n'est pas un membre static de form1, tu y accèdes par form1->Handle

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Points : 64
    Points
    64
    Par défaut
    Je viens de trouver la solution de mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    System::Drawing::Graphics ^pGraphics;
    pGraphics = this->pictureBox1->CreateGraphics();
    Pen ^aPen = gcnew Pen(Color::Aquamarine);
    aPen->Width = 5;
    pGraphics->DrawLine(aPen, 50,50, 75,75);
    Merci à toi nico tu m'avais mis sur la bonne voie .
    En tout cas c'est dur de migrer de Borland à Visual

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par Julien_C++
    Je viens de trouver la solution de mon exemple :

    En tout cas c'est dur de migrer de Borland à Visual
    bah ça n'a rien a voir ! ,ton probléme c'est l'utilisation du C++ ,la platefome n'y est pour rien...

  7. #7
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut problème d'affichage des lignes Drawline
    J’ai essayé de dessiner des lignes après un événement button_click sur un Panel qui à une longueur variable (en fonction de mon input (fichier log) et qui peut dépasser 2000 ligne
    Mais lorsque je compile et j’exécute je trouve que l’affichage des lignes n’est pas stable c'est-à-dire lorsque je déplace le scrollBar du panel pour voir la restes des lignes alors toutes les lignes disparue le même cas lorsque je déplace la fenêtre sous une autre fenêtre, comme si le programme est planté et ce n’est pas le cas.
    J’ai changé l’événement par Panel_paint et ça roule mais un autre problème est apparu:
    Lorsque je déplace le scrolleBar toutes les contenue de mon panel (des milliers des lignes et des labels) devient bizard et très lourd à afficher!
    Aide moi s’il vous plais à résoudre ce problème c’est urgent!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur sur un événement
    Par theo16 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 03/03/2014, 11h35
  2. Erreur C2352
    Par sivaller dans le forum Windows
    Réponses: 1
    Dernier message: 25/10/2008, 14h42
  3. [AJAX] Erreur dans un événement ajouté
    Par sliderman dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/05/2008, 16h57
  4. Erreur avec l'évènement OnClick de ListView
    Par xenos dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/03/2006, 14h54
  5. [O9i][Win][OMS]Erreur sur événement
    Par Fabien Celaia dans le forum Oracle
    Réponses: 4
    Dernier message: 05/11/2004, 15h00

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