Passage de paramaitres ! Où est m'a faute ?

Résolu
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 21 déc. 2004 à 14:12
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 27 déc. 2004 à 14:43
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 déc. 2004 à 16:19
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#
3
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 déc. 2004 à 16:12
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();

}
}
}
3
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 déc. 2004 à 16: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
}
}
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
27 déc. 2004 à 14:35
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#
3

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

Posez votre question
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
21 déc. 2004 à 15:56
Personne pour m'aider ?

Y'a t'il déjà un post sur ce sujet ?
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
21 déc. 2004 à 16:40
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 ??
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 déc. 2004 à 16:52
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#
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 déc. 2004 à 18:27
Je fais un peu de pub pour ma source lol : ici
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 déc. 2004 à 18:45
lol
c'est pas cher en plus ;-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
21 déc. 2004 à 21:33
:big)
J'en ai que deux, faut que je les fasse connaître :-p
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
22 déc. 2004 à 15:51
lol :big)

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
23 déc. 2004 à 14:20
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 ??
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 déc. 2004 à 14:21
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..."
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
23 déc. 2004 à 14:31
Je comprends pas son code, il comprime la structure en 1 variable non ?

Avez-vous un solution par rapport à mon code source ?
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
23 déc. 2004 à 14:52
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 ?
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 déc. 2004 à 15:07
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..."
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
23 déc. 2004 à 15:50
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 ?
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
23 déc. 2004 à 16:50
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 ?)
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
23 déc. 2004 à 16:53
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..."
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
23 déc. 2004 à 17:02
Excuse j'avais mis juste en dessous !!

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

Joyeux noel au passage.
0
Rejoignez-nous