Passage de paramaitres ! Où est m'a faute ? [Résolu]

Signaler
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
-
Form1
Code :

public struct f_axe
{
public int v_axe_X;
public int v_axe_Y;
public int v_ID;
}
public f_axe[] axe_point = new f_axe[1000];


Par exemple la valeur de axe_point[3].v_axe_X et de 123 dans le Form1

Form2
Code :

WinForm imp_variable = new WinForm();



Code :

imp_variable.axe_point[3].v_axe_X;



Mais si je la passe dans le Form2 elle vaut 0.. pourquoi ?? comment faire pour garder les valeurs ?

36 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
je suis pas sur d'avoir compris là
deja je ne vois aucun passage de paramètre
ensuite c'est normal que tout soit à 0, chaque instance de WinForm possède son propre tableau

si tu veux que ton tableau de point soit commun à toutes les instances de ta classe, déclare le en static

si tu veux transmettre une copie de ton tableau a une nouvelle instance de WinForm, surcharge le constructeur

public struct f_axe 
{ 
public int v_axe_X; 
public int v_axe_Y; 
public int v_ID; 
} 
public f_axe[] axe_point;


// constructeur "de base"
public WinForm()
{
//nouveau tableau
axe_point = new f_axe[1000];
}

public WinForm(f_axe[] tab)
{
axe_point = tab;
}


Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
FORM 1 :

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication5
{
public struct maStructure
{
string lib1;
string lib2;
}

/// <summary>
/// Description résumée de Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;
private maStructure structureform1;

public Form1()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();

//
// TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
//
}

/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(144, 112);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
Form2 f = new Form2(structureform1);
f.Show();

}
}
}
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
FORM2

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsApplication5
{
/// <summary>
/// Description résumée de Form2.
/// </summary>
public class Form2 : System.Windows.Forms.Form
{
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;
private maStructure st;

public Form2(maStructure structure)
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();
st = structure;

//
// TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
//
}

/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.Size = new System.Drawing.Size(300,300);
this.Text = "Form2";
}
#endregion
}
}
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
je te cite :

public n_preview(f_axe[] structure)
{
...
}


pkoi maintenant tu change le constructeur en
public n_preview(f_axe structure)
{
...
}

?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Personne pour m'aider ?

Y'a t'il déjà un post sur ce sujet ?
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
J'ai 2 winform !

WinForm ou j'ai déclaré m'a structure, j'y met aussi des valeurs, mais ensuite, je voudrais passer mes valeurs dans winform2 ! mais quand je les passes, (la structure est passé mais les valeurs sont initialisées..) comment faire pour les garders ??
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
je suis completement paumé

montre le code des form (que le code "utile", pas le code du designer etc) en utilisant la balise code (cf barre d'outils en dessous de la zone de saisie)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Je fais un peu de pub pour ma source lol : ici
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
lol
c'est pas cher en plus ;-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
:big)
J'en ai que deux, faut que je les fasse connaître :-p
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
lol :big)

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Je déclare ma fonction avec un tableau en 1000 cases dans mon 1er form:

public struct f_axe
{
public int v_axe_X;
public int v_axe_Y;
public int v_ID;
}
public f_axe[] axe_point = new f_axe[1000];

J'y mets mes valeurs:

axe_point[v_ind].v_axe_X=panel_Dessin.PointToClient(Cursor.Position).X;
axe_point[v_ind].v_axe_Y=panel_Dessin.PointToClient(Cursor.Position).Y;
axe_point[v_ind].v_ID=v_ind;
v_ind++;

J'appele mon 2ème form

n_preview myForm = new n_preview();
myForm.Show();

Dans mon 2ème forme pour avoir accès au variable du 1er form je tape:
WinForm imp_variable = new WinForm();

et j'appele mes variables:

imp_variable.axe_point[i].v_axe_X; //bon ici c'est un exemple pour l'appler

Donc mon problème est quand j'utilise mes variables dans le 2ème form elles sont à 0, mais quand je les lient sur le 1er form elles sont OK. Comment faire pour que le transfère de variables soit correct pour que la valeur ne s'efface pas entre le form1 et le form2 ??
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
tu regarde le lien de bidou vers une de ces formidables sources :o)))

re pub....

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Je comprends pas son code, il comprime la structure en 1 variable non ?

Avez-vous un solution par rapport à mon code source ?
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Dans le code pub.. je vois des Get set :

Ex de déclaratrion :

public class Client
{
private string _firstName;
private string _lastName;
private string _eMail;

public Client() {}

public string FirstName
{
get { return this._firstName; }
set { this._firstName = value; }
}

public string LastName
{
get { return this._lastName; }
set { this._lastName = value; }
}

public string EMail
{
get { return this._eMail; }
set { this._eMail = value; }
}
}

Peut-etre est-ce ca mon erreur ! mais comment les utiliser pour une structure ? où une autre solution ?
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
tu ne peux pas utiliser de get et set pour une structure...c la difference entre structure et classe...(qui permet elle les proprietes ie les get et set)

une autre solution c'est de faire
tu defini une structure public....
sur form1(tu initialise ta struct...)
a un moment tu fais un form2 f = new form2();

le but est de sur le form2 de faire un constructeur qui demande une instance de ta structure...

ca donnerais

private MASTRUCTURE st;
public form2 (MASTRUCTURE struct)
{
.....
st = struct;

}

et voilou tu a passe ta struct a form2....

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Je comprends le raisonnement, mais j'ai du mal à le faire passer à mon compilateur ! peux-tu m'éclairer pour le mettre sur la bonne voie pour la syntaxe ?
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Il doit y avoir un petite erreur dans la 2ème partie :

public class Form2 : System.Windows.Forms.Form
{
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;
private maStructure st;

public Form2(maStructure structure)
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();
st = structure;

Le compilateur me dit qu'il ne trouve pas
public Form2(maStructure structure) //ces 2: maStructure structure

et il me redirige vers :
private maStructure st;

du form2..

message du compil:
Construction
[C# Erreur] WinForm1.cs(18): Le type ou le nom d'espace de noms 'maStructure' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
[C# Erreur] WinForm1.cs(33): Le type ou le nom d'espace de noms 'maStructure' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
ben elle est defini sur le form1 en public (juste sous le namsespace...)

dis moi tes forms elles sont dans la meme assembly ???

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Excuse j'avais mis juste en dessous !!

Merci pour ton aide.. tu m'as beaucoup aidé !
Ca marche !

Joyeux noel au passage.