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 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 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(); } } }
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.
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 } }
Voici d'abord le code d'exécution du formulaire:
et voici mon message d'erreur qui se produit lors de l'affectation de l'Icône du formulaire de :
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); } }
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.
Partager