souci concepteur WinForms

souci concepteur WinForms - C#/.NET managed - Programmation

Marsh Posté le 01-05-2006 à 23:10:58    

bonjour  
 
j'ai créé une petite appli de test pour me familiairser avec les winforms  
(cette appli qui n'a aucun autre interet, c juste pour faire des tests vu que je suis plutot debutant ) :
j'ai voulu créer un groupe de boutons radio
pour cela j'ai créé un tableau d'objets radiobutton
afin de pouvoir mieux le manipuler, avec des boucles.
 
la bonne nouvelle c que mon appli compile bien, l'application marche
 
la mauvaise nouvelle c que Visual Studio me marque une erreur:

Citation :

une erreur s'est produite lors du chargement du document. Corrigez cette erreur et essayez de charger de nouveau le document.
Le message d'erreur est le suivant:
Le concepteur ne pas peut traiter la code de la ligne 61 :
this.tabOptions[0] = new System.Windows.Forms.Radiobutton();
 
le code dans la méthode InitializeComponent ets généré par le concepteur et ne doit pas etre modifié manuellement.
Supprimez les modifications et essayez de rouvrir le concepteur.


 
 
donc certes ca marche en apparence, mais  je veux faire quelque chose de propre et corriger cette erreur
Bref prendre des le debut de bonnes habitudes et prendre note de vos remarques.  
 
voici mon code:
 

Code :
  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. namespace radio
  8. {
  9. /// <summary>
  10. /// Description résumée de Form1.
  11. /// </summary>
  12. public class Form1 : System.Windows.Forms.Form
  13. {
  14.  private System.Windows.Forms.Label label1;
  15.  private System.Windows.Forms.RadioButton[] tabChoixOptions;
  16.  /// <summary>
  17.  /// Variable nécessaire au concepteur.
  18.  /// </summary>
  19.  private System.ComponentModel.Container components = null;
  20.  public Form1()
  21.  {
  22.   //
  23.   // Requis pour la prise en charge du Concepteur Windows Forms
  24.   //
  25.   InitializeComponent();
  26.   //
  27.   // TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
  28.   //
  29.  }
  30.  /// <summary>
  31.  /// Nettoyage des ressources utilisées.
  32.  /// </summary>
  33.  protected override void Dispose( bool disposing )
  34.  {
  35.   if( disposing )
  36.   {
  37.    if (components != null)
  38.    {
  39.     components.Dispose();
  40.    }
  41.   }
  42.   base.Dispose( disposing );
  43.  }
  44.  #region Code généré par le Concepteur Windows Form
  45.  /// <summary>
  46.  /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  47.  /// le contenu de cette méthode avec l'éditeur de code.
  48.  /// </summary>
  49.  private void InitializeComponent()
  50.  {
  51.   this.tabChoixOptions = new System.Windows.Forms.RadioButton[1];
  52.   this.tabChoixOptions[0] = new System.Windows.Forms.RadioButton();
  53.   this.tabChoixOptions[0].Location = new System.Drawing.Point(24, 64);
  54.   this.tabChoixOptions[0].Name = "rb_membre_classe";
  55.   this.tabChoixOptions[0].Size = new System.Drawing.Size(128, 24);
  56.   this.tabChoixOptions[0].TabIndex = 10;
  57.   this.tabChoixOptions[0].Text = "membre de classe";
  58.   this.tabChoixOptions[0].Tag  = "static";
  59.   this.label1 = new System.Windows.Forms.Label();
  60.   this.SuspendLayout();
  61.   //  
  62.   // label1
  63.   //  
  64.   this.label1.Location = new System.Drawing.Point(176, 80);
  65.   this.label1.Name = "label1";
  66.   this.label1.TabIndex = 0;
  67.   this.label1.Text = "label1";
  68.   //  
  69.   // Form1
  70.   //  
  71.   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  72.   this.ClientSize = new System.Drawing.Size(292, 273);
  73.   this.Controls.Add(this.label1);
  74.   this.Name = "Form1";
  75.   this.Text = "Form1";
  76.   this.Load += new System.EventHandler(this.Form1_Load);
  77.   this.ResumeLayout(false);
  78.  }
  79.  #endregion
  80.  /// <summary>
  81.  /// Point d'entrée principal de l'application.
  82.  /// </summary>
  83.  [STAThread]
  84.  static void Main()
  85.  {
  86.   Application.Run(new Form1());
  87.  }
  88.  private void Form1_Load(object sender, System.EventArgs e)
  89.  {
  90.  }
  91. }
  92. }


Message édité par jokari34 le 01-05-2006 à 23:12:13
Reply

Marsh Posté le 01-05-2006 à 23:10:58   

Reply

Marsh Posté le 02-05-2006 à 11:02:07    

Le concepteur qui pleure ?
J'ai jamais eu, c'est marrant...
 
Prend ton bloc :

Code :
  1. this.tabChoixOptions = new System.Windows.Forms.RadioButton[1];
  2. this.tabChoixOptions[0] = new System.Windows.Forms.RadioButton();
  3. this.tabChoixOptions[0].Location = new System.Drawing.Point(24, 64);
  4. this.tabChoixOptions[0].Name = "rb_membre_classe";
  5. this.tabChoixOptions[0].Size = new System.Drawing.Size(128, 24);
  6. this.tabChoixOptions[0].TabIndex = 10;
  7. this.tabChoixOptions[0].Text = "membre de classe";
  8. this.tabChoixOptions[0].Tag  = "static";


 
Et colle-le dans le constructeur, juste en dessous du commentaire :
// TODO : ajoutez le code du constructeur après l'appel à InitializeComponent


---------------
H. - 48h en fiat et j'ai déjà perdu la maitrise de mon argent
Reply

Marsh Posté le 02-05-2006 à 14:08:19    

ou sinon je crée une fonction et j'y deplace le contenu de la fonction InitializeComponent()...

Reply

Marsh Posté le 02-05-2006 à 14:18:56    

le probleme c que si je deplace les blocs posant probleme dans une autre fonction que j'appelle dans le Main()
je les verrai pas dans l'editeur WYSIWYG de VS

Reply

Marsh Posté le 02-05-2006 à 15:08:43    

Ben le soucis c'est que tu rajoute du code dans un format que l'éditeur de code ne peut pas parser.
 
J'aurais tendance à dire créer, tes radiobuttons avec l'éditeur, puis écrit une petite fonction qui remplira ton tableau de radiobutton apres l'initialize component.
 
this.tabChoixOptions = new System.Windows.Forms.RadioButton[8];
this.tabChoixOptions[0] = this.radioButton1;
this.tabChoixOptions[1] = this.radioButton2;
etc...
 
De toute manière, vu comment tu veux faire, tu te retrouvera forcement à faire qqchose à la mimine.

Reply

Marsh Posté le 02-05-2006 à 19:22:42    

faire des choses a la main oui tout a fait
je veux pas compter que VS pour me pondre du code
(ca serait comme faire exclusivement appel a Dreamweaver pour pondre du HTML)
 
ca vous est jamais arrivé de devoir crée rune liste de radiobuttons dans des tableaux, pour par exemple ensuite le parcourir et savoir lequel est checké ?

Reply

Marsh Posté le 02-05-2006 à 20:54:36    

il ne faut jamais toucher à la fonction InitializeComponent(). Xas a raison, tu dois initialiser tes controles dans le constructeur, ou alors les mettre au design-time. mais ne pas toucher à cette fonction


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

Marsh Posté le 03-05-2006 à 09:03:31    

Harkonnen a écrit :

il ne faut jamais toucher à la fonction InitializeComponent(). Xas a raison, tu dois initialiser tes controles dans le constructeur, ou alors les mettre au design-time. mais ne pas toucher à cette fonction


 
[HS]
si tu utilises des users controls qui doivent partager des variables entre eux, tu n'as pas trop le choix non ?
ex : j'ai un userControl qui calcule un identifiant, je créé un accesseur dans ce user control. Lorsque j'ai d'autres users controls qui veulent acceder à l'accesseur, il est vide si le calcul de mon identifiant est fait dans le constructeur ou au page load, car rien ne me dit lequel sera instancié le premier.
 
En revanche, je sais que tout les InitializeComposant seront faits avant le pageLoad.
Et a l'execution des users controls qui vont chercher la variable, je n'aurai pas de souci.
 
J'espere être à peut près clair. Je suis preneur d'une autre méthode s'il y a mieux ;)
[/HS]


Message édité par alien_nan le 03-05-2006 à 09:04:37
Reply

Marsh Posté le 03-05-2006 à 10:53:26    

Le constructeur appelle toujours la méthode InitializeComponent.
Comme son nom l'indique, elle ne sert qu'à initialiser les composants.
 
Si tu veux aller plus loin dans leur utilisation, ben tu le fais toujours dans le constructeur, juste après l'appel à InitializeComponent, et là tu rajoutes ta gestion des évènements (comme pour ton exemple) parce qu'à ce moment tu es sûr que tous tes composants ont été déclaré.


---------------
H. - 48h en fiat et j'ai déjà perdu la maitrise de mon argent
Reply

Marsh Posté le 03-05-2006 à 13:01:47    

Xas a écrit :

Le constructeur appelle toujours la méthode InitializeComponent.
Comme son nom l'indique, elle ne sert qu'à initialiser les composants.
 
Si tu veux aller plus loin dans leur utilisation, ben tu le fais toujours dans le constructeur, juste après l'appel à InitializeComponent, et là tu rajoutes ta gestion des évènements (comme pour ton exemple) parce qu'à ce moment tu es sûr que tous tes composants ont été déclaré.


 
ok, je testerai avec le constructeur. J'avais mis mon code dans le pageLoad, mais rien ne me garantissait que le user control qui est interrogé par les autres soit le premier instancié..je verifie cet aprem

Reply

Sujets relatifs:

Leave a Replay

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