Ich habe ein Bild in einer PictureBox, welches ich bemaßen möchte. Dazu soll der Nutzer die Start- und Endpunkte per Mausklick markieren und das Maß wird gesetzt (Linie gezeichnet)
Für eine Linie funktioniert das auch wunder bar, aber wenn ich die nächste zeichne, wird die vorhergehende gelöscht.
Wie kann ich das realisieren? Im Netz wird leider immer nur eine Linie behandelt :-(
Mein Code bisher:
User startet Messung mit Button:
private void button2_Click(object sender, EventArgs e)
{
Check_MessenEnde = false;
pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
pictureBox1.Paint += new PaintEventHandler(panel1_draw);
pictureBox1.Refresh();
Click_First = true;
}
private void panel1_draw(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Green, 1);
pen.StartCap = LineCap.SquareAnchor;
pen.EndCap = LineCap.RoundAnchor;
e.Graphics.DrawLine(pen, MousePosition_Start_X_picBox, MousePosition_Start_Y_picBox, MousePosition_Ende_X_picBox, MousePosition_Start_Y_picBox);
int current_Row = dGV_ImageList.CurrentCell.RowIndex;
var text = dGV_ImageList.Rows[current_Row].Cells[7].Value;
double Laenge = (Convert.ToDouble(MousePosition_Ende_X) - Convert.ToDouble(MousePosition_Start_X)) * Convert.ToDouble(text);
e.Graphics.DrawString(Laenge.ToString(), Font, Brushes.Black, new Point(14, 5));
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (Click_First == true)
{
Bitmap b = new Bitmap(pictureBox1.Image);
MousePosition_Start_X_picBox = e.X;
MousePosition_Start_Y_picBox = e.Y;
MousePosition_Start_X = (b.Width * e.X / pictureBox1.Width);
MousePosition_Start_Y = (b.Height * e.Y / pictureBox1.Height);
label8.Text = "StartX: " + MousePosition_Start_X;
label7.Text = "StartY: " + MousePosition_Start_Y;
Click_First = false;
label3.Text = Click_First.ToString();
}
else if (Click_First == false)
{
Bitmap b = new Bitmap(pictureBox1.Image);
MousePosition_Ende_X_picBox = e.X;
MousePosition_Ende_Y_picBox = e.Y;
MousePosition_Ende_X = (b.Width * e.X / pictureBox1.Width);
MousePosition_Ende_Y = (b.Height * e.Y / pictureBox1.Height);
label6.Text = "Ende_X: " + MousePosition_Ende_X;
label5.Text = "Ende_Y: " + MousePosition_Ende_Y;
Click_First = true;
pictureBox1.Refresh();
label3.Text = Click_First.ToString();
}
if (e.Button == MouseButtons.Right)
{
Check_MessenEnde = true;
pictureBox1.MouseDown -= new MouseEventHandler(pictureBox1_MouseDown);
}
}