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.







Répondre avec citation





Partager