Salut à tous,
Je suis entrain d'apprendre le fait de se créer des contrôles perso, mais plus particulièrement le fait de gérer leurx events. Je suis un peu bloqué et ce même en passant plusieurs heures à lire sur le web un peu partout.
Pour me pratiquer voici ce que j'ai fait:
Un contrôle "Matériel":
Et mon 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
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 public partial class Materiel : UserControl { private int typeMateriel; private float xPos; private float yPos; private int lieuGeo; public Materiel(int type, float x, float y, int lieu) { InitializeComponent(); this.AllowDrop = true; ImageMateriel res = new ImageMateriel(); typeMateriel = type; xPos = x; yPos = y; lieuGeo = lieu; switch (typeMateriel) { //Ordi case 1: this.pbElement.Image = ImageMateriel.dell_desktop; break; //Imprimante case 2: break; //Autre default: this.pbElement.Image = ImageMateriel.dell_desktop; break; } } public delegate void ClickedHandler(); public event ClickedHandler Clicked; public void saveMateriel() { try { //#TODO Saver le tout dans la BD OpenAudit } catch (Exception exc) { throw exc; } } public Materiel getMateriel(string systemUUID) { Materiel ret = null; try { //#TODO //typeMateriel = type; //xPos = x; //yPos = y; //lieuGeo = lieu; } catch (Exception exc) { throw exc; } return ret; } public void Materiel_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.DoDragDrop(this.pbElement.Image, DragDropEffects.All); } } public void Materiel_MouseClick(object sender, MouseEventArgs e) { OnClicked(); } protected virtual void OnClicked() { if (Clicked != null) { Clicked(); } } }
Ce que je veux faire fonctionner en premier lieu est le clicked de mon contrôle. Ensuite le drag and drop sera surement trivial...
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 public partial class Map : Form { public Map() { InitializeComponent(); } private void Map_FormClosing(object sender, FormClosingEventArgs e) { Main.refMap = null; } private void pbMap_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Bitmap)) { //Bitmap image = (Bitmap)(e.Data.GetData(DataFormats.Bitmap)); Materiel mat = new Materiel(1, e.X, e.Y, 1); mat.AllowDrop = true; //mat.MouseDown += new MouseEventHandler(mat1_MouseDown); this.Controls.Add(mat); mat.Location = new Point(e.X, e.Y); mat.BringToFront(); } } private void pbMap_DragOver(object sender, DragEventArgs e) { e.Effect = DragDropEffects.All; } private void button1_Click(object sender, EventArgs e) { Materiel mat1 = new Materiel(1, 20, 20, 1); this.Controls.Add(mat1); mat1.Location = new Point(100, 100); mat1.AllowDrop = true; mat1.Clicked += new Materiel.ClickedHandler(mat1_Clicked); mat1.BringToFront(); } private void mat1_Clicked() { MessageBox.Show("Hey hey!!!"); } }
J'imagine que cela vient de fait que j'ajoute le contrôle via le code et que la référence à l'objet n'existe plus à cause qu'il est déclaré dans un event au lien d'être public au form ?? Est-ce que je m'y prend bien?
Merci pour le coup de main et je continue mes lectures
Partager