Comment tracer une ligne à l'aide d'Événement MouseMove
Je suis en train de tracer une ligne à l'aide de OnMouseMove()
événement. Mon Problème est que à chaque fois que je bouge la souris, Elle laisse une trace. J'ai essayé d'utiliser la méthode refresh, mais quand j'ai arrêter le déplacement de la souris, la ligne a disparu. Je ne veux pas la ligne à tracer OnPaint();
, Juste envie de le dessiner OnMouseMove()
.
EDIT: je suis à l'aide d'un panneau transparent(cp.ExStyle |= 0x20;), donc je ne peux pas utiliser le graphics.Clear()
et BackColor()
Voici une Image de l'Échantillon sans le Refresh()
:
Voici mon code:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
using (var p = new Pen(Color.Black, 3))
{
p.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
g.DrawLine(p, st, e.Location);
}
Thread.Sleep(30);
Invalidate();
//this.Refresh();
g.Dispose();
}
Ce qui concerne
Vous ne pouvez pas faire ce travail. Corrigé: social.msdn.microsoft.com/forums/en-US/winforms/thread/...
OriginalL'auteur Rye | 2010-09-15
Vous devez vous connecter pour publier un commentaire.
La suivante fonctionne pour moi. Fondamentalement, garder une trace de la dernière ligne tracée et dessiner dessus avec la couleur de fond du panneau (qui donne l'effet de compensation).
Si vous panneau couleur d'arrière-plan est Transparent, vous aurez besoin de changer
panel1.BackColor
àpanel1.Parent.BackColor
Si le Panneau Transparent ne fonctionne pas, vous pouvez utiliser le
DrawReversibleLine
fonction (bien que ceci ne permet pas la couleur ou l'épaisseur de la ligne à être changé, elle ne devrait pas avoir de problèmes avec le dessin/l'effacement même si le panneau est Transparent:Je viens de voir vos commentaires. Vous pouvez utiliser
panel1.Parent.BackColor
panel1 parent est la forme. Le panneau transparent clignote en blanc. lorsque j'ai utilisé
panel1.Parent.BackColor
Mise à jour de ma réponse, avec une approche différente
Oh! oui le drawreversible ligne. J'ai oublié. Attendez, je vais essayer.
OriginalL'auteur SwDevMan81
Un autre moyen simple pour dessiner une ligne avec la souris en C#:
vous devez éliminer g et un stylo.
OriginalL'auteur AiviS
Après
mettre:
Ne fait que résoudre le problème?
Oh, à droite. J'ai pensé que vous étiez en train de dessiner comme un crayon. Je vois maintenant que vous voulez avoir un seul point de départ et être en mesure de déplacer le point de fin autour de l'avoir à redessiner une seule ligne entre le point de départ et le nouveau point de fin.
Oui @BoltBait c'est correct.
OriginalL'auteur BoltBait
Le problème avec la ligne de train de disparaître, c'est que lorsque le panneau est peint, la ligne n'est pas redessiné. Ce que vous avez vraiment besoin est de mettre à jour le point final de la ligne du segment lorsque la souris est déplacé à travers le panneau et à invalider le panneau. Bien sûr, cela signifie que vous ne poignée de la
Paint
événement sur le panneau.Code ici, sans le gestionnaire d'événements d'inscription:
Alright. Mais pourquoi ne pouvez-vous pas gérer la
Paint
événement? C'est le moyen le plus facile.Je veux juste la ligne comme un marqueur.
Pouvez-vous expliquer ce que cela signifie?
J'ai un Panneau transparent. Il est positionné au-dessus d'une image(e.g picturebox), Cette image contient des dessins en ligne. Je veux juste mesure les dessins à l'aide de la drawline sur
MouseMove()
événement.OriginalL'auteur Ani
dans l'activité Principale écrire ce code:
OriginalL'auteur Pir Fahim Shah