Probleme en C#: Ouvrir une Form a partir d'un bouton d'une autre Form

Probleme en C#: Ouvrir une Form a partir d'un bouton d'une autre Form - C#/.NET managed - Programmation

Marsh Posté le 06-01-2006 à 22:39:46    

Alors voila:
 
J'ai un fichier Form1.cs dans lequel est défini ma class Form1 : Form qui me permet d'afficher une fenetre de type applicationwindows.
Dans cette fenetre je crée un menu avec un menuitem nommé menuItem2.
 
Je voudrai une fois avoir cliqué sur cet item qu'il affiche une boite de dialog.
 
Pour cela j'ai crée une autre classe dans un autre fichier nommé BoiteDialog.cs dans le quel se trouve ma class BoiteDialog : Form
 
Ces 2 fichiers se trouvent dans le meme dossier. Mais je n'arrive pas , j'ai des erreurs de compilation.  
C'est certainement pas grand chose mais je vois pas.
 
Si qq'un peux m'aider .
 
 
Voila mes erreur de compilation au niveau du fichier Form1 .cs
 
Form1.cs(72,8): error CS0103: The name 'BoiteDialog' does not exist in the current context
Form1.cs(78,9): error CS0103: The name 'BoiteDialog' does not exist in the current context
Form1.cs(91,4): error CS0246: The type or namespace name 'BoiteDialog' could not be found (are you missing a using directive or an assembly reference?)
Form1.cs(91,24): error CS0246: The type or namespace name 'BoiteDialog' could not be found (are you missing a using directive or an assembly reference?)

 
 
----------------------
Code Form1.cs :  
----------------------

Code :
  1. namespace JeuxDuChaos
  2. {
  3. public class Form1 : Form
  4. {
  5.  private MainMenu mainMenu1;
  6.  private MenuItem menuItem2;
  7.  private Container components = null;
  8.  public Form1()
  9.  {
  10.   InitializeComponent();
  11.  }
  12.  protected override void Dispose( bool disposing )
  13.  {
  14.   if( disposing )
  15.   { if (components != null)
  16.     {
  17.    components.Dispose();
  18.     }
  19.   }
  20.   base.Dispose( disposing );
  21.  }
  22.  private void InitializeComponent()
  23.  {
  24.   this.mainMenu1 = new System.Windows.Forms.MainMenu();
  25.   this.menuItem1 = new System.Windows.Forms.MenuItem();
  26.   this.menuItem2 = new System.Windows.Forms.MenuItem();
  27.   this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem1});
  28.   this.menuItem1.Index = 0;
  29.   this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {  this.menuItem2});
  30.   this.menuItem1.Text = "Options";
  31.   //  
  32.   // menuItem2
  33.   //  
  34.   this.menuItem2.Index = 0;
  35.   this.menuItem2.Text = "Nbr Itérations";
  36.   this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
  37.   //  
  38.   // Form1
  39.   //  
  40.   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  41.   this.ClientSize = new System.Drawing.Size(400, 381);
  42.   this.Menu = this.mainMenu1;
  43.   this.Name = "Form1";
  44.   this.Text = "Form1";
  45.   this.Load += new System.EventHandler(this.Form1_Load);
  46.  }
  47.  static void Main()
  48.  {
  49.   Application.Run(new Form1());
  50.  }
  51.  // Permet de redessiner le contenu de ma Fenetre lors d'un redimensionnement
  52.  protected override void OnResize(EventArgs ea)
  53.  {
  54.   Invalidate();
  55.  }
  56.  protected override void OnPaint (PaintEventArgs pe)
  57.  {
  58.   int N;
  59.   if (BoiteDialog.NbIteration == 0)
  60.   {
  61.    N = 10000;
  62.   }
  63.   else
  64.   {
  65.    N = BoiteDialog.NbIteration ;
  66.   }
  67.  private void Form1_Load(object sender, System.EventArgs e)
  68.  {
  69.  }
  70.  private void menuItem2_Click(object sender, System.EventArgs e)
  71.  {
  72.   BoiteDialog b = new BoiteDialog(this);
  73.   b.ShowDialog();
  74.  }
  75. }
  76. }


 
----------------------
Code BoiteDialog.cs :
----------------------

Code :
  1. amespace JeuxDuChaos
  2. {
  3. public class BoiteDialog : Form
  4. {
  5.  private Label label1;
  6.  private TextBox NbrIterBox;
  7.  private Form fenetreParent;
  8.  private Button ValiderButton;
  9.  private Container components = null;
  10.  public BoiteDialog(Form f)
  11.  {
  12.   InitializeComponent();
  13.   fenetreParent = f;
  14.  }
  15.  protected override void Dispose( bool disposing )
  16.  {
  17.   if( disposing )
  18.   {
  19.    if(components != null)
  20.    {
  21.     components.Dispose();
  22.    }
  23.   }
  24.   base.Dispose( disposing );
  25.  }
  26.  //#region Code généré par le Concepteur Windows Form
  27.  private void InitializeComponent()
  28.  {
  29.   this.label1 = new System.Windows.Forms.Label();
  30.   this.NbrIterBox = new System.Windows.Forms.TextBox();
  31.   this.ValiderButton = new System.Windows.Forms.Button();
  32.   this.SuspendLayout();
  33.   //  
  34.   // label1
  35.   //  
  36.   this.label1.Location = new System.Drawing.Point(24, 32);
  37.   this.label1.Name = "label1";
  38.   this.label1.Size = new System.Drawing.Size(192, 16);
  39.   this.label1.TabIndex = 0;
  40.   this.label1.Text = "Entrez le nombre de points à afficher";
  41.   //  
  42.   // NbrIterBox
  43.   //  
  44.   this.NbrIterBox.Location = new System.Drawing.Point(224, 24);
  45.   this.NbrIterBox.MaxLength = 7;
  46.   this.NbrIterBox.Name = "NbrIterBox";
  47.   this.NbrIterBox.Size = new System.Drawing.Size(72, 20);
  48.   this.NbrIterBox.TabIndex = 1;
  49.   this.NbrIterBox.Text = "";
  50.   //  
  51.   // ValiderButton
  52.   //  
  53.   this.ValiderButton.Location = new System.Drawing.Point(136, 64);
  54.   this.ValiderButton.Name = "ValiderButton";
  55.   this.ValiderButton.TabIndex = 2;
  56.   this.ValiderButton.Text = "Valider";
  57.   //  
  58.   // BoiteDialog
  59.   //  
  60.   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  61.   this.ClientSize = new System.Drawing.Size(328, 101);
  62.   this.Controls.Add(this.ValiderButton);
  63.   this.Controls.Add(this.NbrIterBox);
  64.   this.Controls.Add(this.label1);
  65.   this.Name = "BoiteDialog";
  66.   this.Text = "Nombre d\'itérations";
  67.   this.Load += new System.EventHandler(this.BoiteDialog_Load);
  68.   this.ResumeLayout(false);
  69.  }
  70.  //#endregion
  71.  private void BoiteDialog_Load(object sender, System.EventArgs e)
  72.  {
  73.  }
  74.  private void button1_Click(object sender, System.EventArgs e)
  75.  {
  76.   //écrire code permettant de recuperer la valeur de n et de la rentrer en tant que nbr d'iteration dans le main
  77.   if(NbrIterBox.Text != "" ) {int NbIteration = int.Parse(NbrIterBox.Text);}// transforme en entier la chaine de caractère entré  par le user
  78.   DialogResult = DialogResult.OK;
  79.   this.Close();
  80.  }
  81. }
  82. }


Message édité par pulsar07 le 06-01-2006 à 22:41:47
Reply

Marsh Posté le 06-01-2006 à 22:39:46   

Reply

Marsh Posté le 06-01-2006 à 23:14:44    

l'erreur CS0103 provient du fait que tu n'as instancié aucun objet BoiteDialog dans ta fonction OnPaint. en plus, ta variable NbIteration, tu la sors d'ou ? ta classe BoiteDialog ne contient aucune propriété nommée NbIteration.
en plus, tu as oublié l'accolade fermante de OnPaint() (ou alors c'est une erreur de copy/paste)
l'erreur CS0246 peut avoir 2 causes possibles :
- ta classe BoiteDialog est définie dans une assembly séparée, auquel cas tu dois la rajouter en référence,
- ta classe BoiteDialog est définie dans un namespace différent, ce qui ne semble pas être le cas puisque tes 2 classes sont dans le même namespace (JeuxDuChaos). poste éventuellement une capture d'écran de ton explorateur de solutions, avec les différentes classes et namespaces


Message édité par Harkonnen le 06-01-2006 à 23:17:00

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-01-2006 à 23:47:51    

oui l'accolade est une erreur de copy/paste je pense, j'ai essayé de copier que le code qui peut etre etait interessant pour ce post c'est pr ca.
 
Pour NbIteration je l'ai définie en tant que int dans la fonction button_Click(....) tout en bas  de ma class BoiteDialog.
 
l'erreur CS0103 : J'ai crée l'instance BoiteDialog dans la fonction  menuItem2_Click(object sender, System.EventArgs e)
 
c'est pas correct?
 
pour l'erreur CS0246 :
 
Effectivement au debut j'avais pas le meme namespace. J'ai juste changé le namespace dans Form1.cs et me suis assuré que ces deux fichier etaient bien dans le meme dossier du meme nom que ce namesapce a savoir JeuxDuChaos.  
Ca suffit ? ou j'ai oublié un truc ?
 
 
Pour l'explorateur de solution , bah je n'ai pas visual studio chez moi, la j'essaie ca sous un editeur de texte.

Reply

Marsh Posté le 07-01-2006 à 00:11:48    

pulsar07 a écrit :


Pour NbIteration je l'ai définie en tant que int dans la fonction button_Click(....) tout en bas  de ma class BoiteDialog.


euh... tout ce que tu as défini, c'est une variable locale à la fonction button_Click() qui "meurt" à la fin de cette fonction, et qui n'est pas du tout exposée au monde extérieur !
tu as déjà entendu parler des variables membres et des propriétés (get/set) ? parce que là, ce que tu fais, c'est n'importe quoi !
si tu veux utiliser ta variable NbIteration dans une autre classe, soit tu la déclares comme variable membre publique de ta classe BoiteDialog (crade), soit tu la déclares en private et tu l'exposes via les accesseurs get/set (bien plus propre). mais la déclarer à l'intérieur d'une méthode comme tu le fais, c'est n'importe quoi.
 

pulsar07 a écrit :


l'erreur CS0103 : J'ai crée l'instance BoiteDialog dans la fonction  menuItem2_Click(object sender, System.EventArgs e)
 
c'est pas correct?


non, tu n'as rien créé du tout  ! tu as appris les concepts de base de la POO, ou tu programmes à l'aveuglette ? parce que ce que tu as fait, c'est n'importe quoi :

Code :
  1. if (BoiteDialog.NbIteration == 0)


ce code aurait pu marcher si tu avais déclaré la variable NbIteration comme membre static de ta classe BoiteDialog, ce qui n'est pas le cas.
il faut instancier un objet de type BoiteDialog avec new, comme tu le fais dans ta fonction menuItem2_Click(), mais ne le fais pas dans le OnPaint, mais directement dans le constructeur de la classe, sinon je te dis pas l'état de la mémoire, qui va finir par arriver à saturation à force de créer des BoiteDialog à chaque WM_PAINT
 

pulsar07 a écrit :


pour l'erreur CS0246 :
 
Effectivement au debut j'avais pas le meme namespace. J'ai juste changé le namespace dans Form1.cs et me suis assuré que ces deux fichier etaient bien dans le meme dossier du meme nom que ce namesapce a savoir JeuxDuChaos.  
Ca suffit ? ou j'ai oublié un truc ?
 
Pour l'explorateur de solution , bah je n'ai pas visual studio chez moi, la j'essaie ca sous un editeur de texte.


tu compiles comment ? donne la ligne de commande que tu utilises
 
bref, il te manque pas mal de bases en OO, y'a du boulot


Message édité par Harkonnen le 07-01-2006 à 00:12:27

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-01-2006 à 00:25:35    

lol, oui je debute si on peut dire .
 
je compile sous Scite(un editeur) , mais la commande c'est celle la derriere:
 
csc Form1.cs

Reply

Marsh Posté le 07-01-2006 à 00:34:24    

pulsar07 a écrit :


csc Form1.cs


[:el g]
et le fichier BoiteDialog.cs, il compte pour du beurre ?  [:moule_bite]  
et tu t'étonnes d'avoir une référence manquante ?  [:jean-guitou]  
 
csc Form1.cs BoiteDialog.cs
 
ça devrait aller beaucoup mieux comme ça


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-01-2006 à 16:29:28    

C'est bon ca marche !!  
 
Merci bien.
 
J'ai fait dans la version "crade" comme tu dis en déclarant en tant que static public ma variable NbIteration.
 
Je connais pas get/set alors je vais essayer de voir coment ca marche.
 
thx

Reply

Marsh Posté le 07-01-2006 à 16:42:54    

pourquoi utilisé un tel éditeur quand il y a un editeur comme VISUAL STUDIO qui fait kazi tout automatiquement (malheureusement)? pour débuter c'est l'idéal je trouve. Car parfois il y a moyen de faire des trucs et ça pond le code tout seul (dommage aussi)...

Reply

Marsh Posté le 09-01-2006 à 12:18:54    

Ptet pask'il y a des gens qui n'ont pas 500 euros à dépenser dans un éditeur...


---------------
Tout est normal, suffit de comprendre pourquoi.
Reply

Marsh Posté le 09-01-2006 à 13:12:45    

Et VS Express alors ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed