Comment puis-je permettre à l'utilisateur de dessiner une ligne dans un formulaire? Utiliser le bouton gauche de la souris pour dessiner et le bouton droit de la souris pour effacer.Autoriser l'utilisateur à dessiner une ligne sur le formulaire dans une application WinForms
Répondre
Pas si compliqué, un exemple rapide ... Je n'ai pas inclus les contrôles ici.
Graphics g = null; // initialize in Form_Load with this.CreateGraphics()
Point lastPoint;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = e.Location;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
g.DrawLine(Pens.Blue, lastPoint, e.Location);
lastPoint = e.Location;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
}
Ce qui précède est un exemple pour montrer comment dessiner un formulaire. Idéalement, vous devez placer toutes les coordonnées de ligne dans une collection et dessiner en utilisant DrawLines(). Ensuite, utilisez Graphics :: DrawLines() dans le formulaire :: OnPaint. Lorsque vous cliquez sur le bouton droit de la souris, effacez la collection de points et forcez un redessin.
En fin de compte, vous voudrez peut-être contenir tout le dessin/effacement action dans un contrôle spécifique et gérer sa réactualisation/état de infirmation de manière cohérente, mais la réponse de A9S6 va sûrement vous aider à démarrer et profiter GDI + dessin;)
Exemple qui tire la ligne et utilise le lieu pour la peinture correspond le:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<Point> points = new List<Point>();
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
points.Add(e.Location);
Invalidate();
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (points.Count > 2)
{
e.Graphics.DrawLines(Pens.Black, points.ToArray());
}
}
}
le ToArray() n'est pas très agréable quand la liste obtient longtemps cependant.
Vérifiez l'exemple de code dans ce fil: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/c8e09147-dfea-4afa-8006-7c87c7967fe5 –