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.