Bonjour
j'aimerai dessiner une ligne dans une listBox pour séparer deux item mais je n'y arrive pas
Quelqu'un peut il me mettre sur la voie?
merci d'avance
Bonjour
j'aimerai dessiner une ligne dans une listBox pour séparer deux item mais je n'y arrive pas
Quelqu'un peut il me mettre sur la voie?
merci d'avance
euh, ca semble pas évident
avec listbox.creategraphics.drawline, tu peux tracer une ligne
mais si tu veux que tes elements soient séparés par des lignes, je peux qu'il faut heriter de listbox et overrider la sub qui dessine un élément et faire le trait
en fait cest pas tous les items c'est dans le cas d'un drag and move...au mouseMouve sur la listbox je souhaite déplacer un trait horizontal indiquant ou sera inséré l'index au mouseUp de la souris...
il faut donc que dans le MouseMouve je puisse efacer l'ancien trait pour retracer le nouver (enfin un drag and drop quoi)
Help me please
en fait dans le MouseMove de ma listebox j'ai ca
le trait ne suis pas bien la souris ca ressemble à un problème de raffraichissement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 P1.X = 0; P1.Y = e.Y; P2.X = listBox1.Width; P2.Y = e.Y; Pen crayon = new Pen(Color.Black,1); Graphics dessin = listBox1.CreateGraphics(); dessin.DrawLine(crayon, P1, P2); listBox1.Invalidate();
quelqu'un a t il un exemple de drag and drop dans une listbox
pour le drag and drop, y a des exemples sur le forum ou dans l'aide de vs
ca commence par un .DoDragDrop(item)
ensuite pour déssiner le trait, tu peux selon x et y faire un trait, puis si le trait doit etre autrepart tu fais listbox.Refresh puis retrace du trait
oui le listbox.refresh marche mais le problème c'est que je n'efface pas le trait précedemment créé ca devient donc vite plein de trait dans la listbox
quand je disais listbox.refresh c'était pour effacer le trait
tu dis que ca marche et que ca efface pas le trait alors ca marche pas ...
essaye listbox.invalidate
ou listbox.creategraphics.clear(white) puis listbox.refresh
il sont ou les exemples sur le forum je les trouve pas
listbox.creategraphics.clear(white) ca marche pas ca efface meme le texte
je renouvelle mon post je n'arrive pas a trouver d'exmple me permettant de faire du drag and drop dans une listbox..
en fait j'y arrive (un peut a l'artisanale je pense...on fait comme on peut) mais je n'arrive pas à avoir le trait dans la liste box au déplacement de la souris permettant d'indiquer où sera positionné l'item au relachement de la souris..
merci d'avance
Bonjour,
Oulà.
Pour faire ce que tu veux, tu as besoins d'implémenter :
1 > L'événement DrawItem du contrôle ListBox.
2 > L'évenement DragOver du contrôle ListBox.
Dans le 2, tu détermine l'items de ton contrôle sur lequel pointe ta souris.
Dans le 1, tu redessinne tous tes items. c'est pas très compliqué avec l'objet Graphics. Et tu dessine ton trait dans l'item pointé déterminer par le 2.
Voilà, @ +
mais j'ai essayé mais je tombe jamais dans le drawitem
Salut,
j'ai une source qui trainait sur mon ordi et que faisait ce que tu voulais, à noter cependant qu'il y a surement moyen d'optimiser tout ca, je l'avais un peu ecrit à la va-vite.
Je pense que ca fait ceux que tu souhaites (trace une ligne à l'emplacement d'insertion).
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 public partial class Form1 : Form { private class TransportBox { object m_o; public object Objet { get { return m_o; } } public TransportBox(object o) { m_o = o; } } Rectangle m_dragRectangle; int m_selectedIndex; public Form1() { InitializeComponent(); this.listBox1.DragOver += new DragEventHandler(listBox1_DragOver); this.listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop); this.listBox1.MouseMove += new MouseEventHandler(listBox1_MouseMove); this.listBox1.MouseDown += new MouseEventHandler(listBox1_MouseDown); this.listBox1.MouseUp += new MouseEventHandler(listBox1_MouseUp); m_selectedIndex = -1; for (int i = 0; i < 5; i++) { listBox1.Items.Add(i); } } void listBox1_MouseDown(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { m_dragRectangle = new Rectangle( new Point(e.X - (SystemInformation.DragSize.Width / 2), e.Y - (SystemInformation.DragSize.Height / 2)), SystemInformation.DragSize); } } void listBox1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { m_dragRectangle = Rectangle.Empty; } } void listBox1_MouseMove(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { int index = listBox1.IndexFromPoint(e.Location); if (m_dragRectangle != Rectangle.Empty && !m_dragRectangle.Contains(e.Location) && index != ListBox.NoMatches) { TransportBox trans = new TransportBox(listBox1.Items[index]); DragDropEffects finalEffect = listBox1.DoDragDrop(trans, DragDropEffects.Move); } } } void listBox1_DragOver(object sender, DragEventArgs e) { int index = listBox1.IndexFromPoint(listBox1.PointToClient(new Point(e.X, e.Y))); if (index != ListBox.NoMatches) { if (m_selectedIndex != index) { m_selectedIndex = index; Refresh(); } Rectangle rect = listBox1.GetItemRectangle(index); using (Graphics g = listBox1.CreateGraphics()) { Pen p = new Pen(Brushes.Black, 2); g.DrawLine(p, rect.Location, rect.Location + new Size(rect.Width, 0)); } e.Effect = DragDropEffects.Move; } else e.Effect = DragDropEffects.None; } void listBox1_DragDrop(object sender, DragEventArgs e) { int index = listBox1.IndexFromPoint(listBox1.PointToClient(new Point(e.X, e.Y))); if (index != ListBox.NoMatches && e.Effect == DragDropEffects.Move) { TransportBox trans = e.Data.GetData(typeof(TransportBox)) as TransportBox; if (trans != null) { object o = trans.Objet; if (o != null) { this.listBox1.Items.Remove(o); this.listBox1.Items.Insert(index, o); } } } } }
Si tu te poses la question de pourquoi la classe TransportBox, c'est du a certaines limitations de IDataObject.GetData(Type) qui ne supporte pas l'heritage (genre pouvoir coller un System.Object ne marche pas, ou alors j'ai jamais compris comment faire).
Bon courage.
Il existe une propriété DrawMode à modifier pour que tu passe dans le drawitem.mais j'ai essayé mais je tombe jamais dans le drawitem
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager