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

Windows Forms Discussion :

Problème avec un formulaire générique


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut Problème avec un formulaire générique
    Bonjour à tous,

    Je désire développer un formulaire avec un type générique.
    Par exemple j'ai plusieurs classes qui dérivent de CActDetail.
    Je voudrais concevoir un formulaire générique pour saisir les informations associées à ces classes dérivées.

    Voici mon code dans sa forme la plus simple, le nom du formulaire est frmGeneric.

    Code frmGeneric.cs
    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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Windows.Forms;
    using EFCL.EActEdit;
     
    namespace HRM.UI
    {
        public partial class frmGeneric<DETAIL_TYPE> : Form where DETAIL_TYPE : CActDetail,  new()
        {
            private DETAIL_TYPE m_detail;
     
            public frmGeneric()
            {
                InitializeComponent();
                m_detail = new DETAIL_TYPE();
            }
     
            private void ClearFieldValues()
            {
                m_detail.Empty();
                m_detail.SetKey("");
            }
     
            private void OnLoad(object sender, EventArgs e)
            {
                ClearFieldValues();
            }
        }
    }
    Code frmGeneric.Designer.cs
    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
    namespace HRM.UI
    {
        partial class frmGeneric<DETAIL_TYPE>
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
     
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #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>
            private void InitializeComponent()
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmGeneric<DETAIL_TYPE>));
                this.SuspendLayout();
                // 
                // frmGeneric
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(292, 266);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
                this.KeyPreview = true;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.Name = "frmGeneric";
                this.ShowInTaskbar = false;
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
                this.Text = "frmGeneric";
                this.Load += new System.EventHandler(this.OnLoad);
                this.ResumeLayout(false);
     
            }
     
            #endregion
        }
    }
    Lorsque je déclare une instance de ce formulaire avec la classe dérivée de CActDetail, CProfStatusDetail et j'appelle ShowDialog j'obtient le message d'erreur suivante.

    Voici d'abord le code d'exécution du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void OnFileSetting(object sender, System.EventArgs e)
            {
                try
                {
                    frmGeneric<CProfStatusDetail> frm = new frmGeneric<CProfStatusDetail>();
                    frm.ShowDialog();
                    frm.Dispose();
                    frm = null;
                }
                catch (Exception ex)
                {
                    CEUITools.ShowError(ex.Message);
                }
            }
    et voici mon message d'erreur qui se produit lors de l'affectation de l'Icône du formulaire de :

    Impossible de trouver des ressources appropriées pour la culture spécifiée ou la culture neutre. Assurez-vous que "HRM.UI.frmGeneric`1.resources" a été correctement incorporé ou lié dans l'assembly "THrm" au moment de la compilation ou que tous les assemblys satellites requis sont chargeables et complètement signés.

    Note : mon projet s'appelle THrm.


    Je ne sais pas si c'est d'abord possible de concevoir des formulaires génériques.

    En tout cas je vous remercie d'avance pour toute aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 512
    Par défaut
    Chaque classe de formulaire dispose d'un ensemble de ressource dans les fichiers de ressource, c'est dans le code généré par les Designer de formulaire.
    Votre mode d'utilisation de la dérivation de classe générique est-elle compatible avec le code généré par le Designer ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut
    Vous avez raison pour les ressources du formulaire.

    J'ai remplacé dans le code généré de InitializeComponent()
    l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
    par celle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Icon = System.Drawing.Icon.ExtractAssociatedIcon(CHrmApp.g_theApp.AppDir + "AppIcon.ICO");
    où CHrmApp.g_theApp.AppDir + "AppIcon.ICO" est le chemin complet de mon icône dans le fichier de ressources globales du projet, et le problème ne se pose plus.

    Le problème est que le code de InitializeComponent() est régéneré chaque fois le formulaire change (un nouvel control par exmple).

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par David Fouejio Voir le message
    J'ai remplacé dans le code généré de InitializeComponent()
    Il ne faut pas. Si tu veux initialiser programmatiquement une propriété de ta form, tu peux le faire par exemple dans le constructeur, après l'appel d'InitializeComponents.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut
    Le problème est que l'exception est levée sur une instruction se trouvant dans la fonction InitializeComponent().

Discussions similaires

  1. problème avec un formulaire
    Par mary12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 16
    Dernier message: 07/06/2006, 11h39
  2. Problème avec un formulaire
    Par GilesB dans le forum Langage
    Réponses: 9
    Dernier message: 06/06/2006, 21h19
  3. Problème avec un formulaire
    Par Mysti¢ dans le forum Langage
    Réponses: 3
    Dernier message: 02/04/2006, 00h19
  4. [Système] Problème avec les formulaires
    Par Ludo75 dans le forum Langage
    Réponses: 9
    Dernier message: 02/02/2006, 11h13
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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