c#pictureBox 컨트롤에 여러 개의 사각형 상자 그리기 및 그려진 사각형 상자 삭제
사각형 상자를 그릴 때 프로그램에 마우스에 해당하는 이벤트 MouseDown, MouseUp, MouseMove, Paint를 추가합니다.
사각형 상자를 그리는 코드는 다음과 같습니다.
1 Point start, end;//
2 bool blnDraw;// MouseMove
3 public struct StartAndEndPoint
4 {
5 Point Start;
6 Point End;
7 }
8 //
9 List multiAreaPoint=new List();
10
11 private void pic_MouseDown(object sender, MouseEventArgs e)
12 {
13 if (e.Button == MouseButtons.Left)
14 {
15 start = e.Location;
16 blnDraw = true;
17 }
18 // pictureBox
19 if (e.Button == MouseButtons.Right)
20 {
21 start = new Point(0, 0);
22 }
23 }
24
25 private void pic_MouseUp(object sender, MouseEventArgs e)
26 {
27 PictureBox pic = sender as PictureBox;
28
29 if (e.Button == MouseButtons.Left)
30 {
31 end = e.Location;
32 blnDraw = false;
33 }
34 if (e.Button == MouseButtons.Right)
35 {
36 end = new Point(pic.Width, pic.Height);
37 }
38
39
40 if (pic.Image != null)
41 {
42 if (start != end)
43 {
44 StartAndEndPoint onepoint = new StartAndEndPoint();
45 onepoint.start = start;
46 onepoint.end = end;
47
48 if ((!multiAreaPoint.Contains(onepoint)))
49 {
50 multiAreaPoint.Add(onepoint);//
51 }
52 }
53 }
54
55 //pic.Refresh();
56 }
57
58 private void pic_MouseMove(object sender, MouseEventArgs e)
59 {
60 if (blnDraw)
61 {
62 if (e.Button != MouseButtons.Left)//
63 return;
64 end = e.Location;
65 pic.Invalidate();
66 }
67 }
1 private void pic_Paint(object sender, PaintEventArgs e)
2 {
3 PictureBox pic = sender as PictureBox;
4
5 Pen pen = new Pen(Color.Red, 1);
6 pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;//
7 if (blnDraw)
8 {
9 if (pic.Image != null)
10 {
11 // ,
12 e.Graphics.DrawRectangle(pen, Math.Min(start.X, end.X), Math.Min(start.Y, end.Y), Math.Abs(start.X - end.X), Math.Abs(start.Y - end.Y));
13 }
14 }
15
16 //
17 foreach (StartAndEndPoint points in multiAreaPoint)
18 {
19 Point p1 = points.start;
20 Point p2 = points.end;
21 e.Graphics.DrawRectangle(pen, Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y), Math.Abs(p1.X - p2.X), Math.Abs(p1.Y - p2.Y));
22 }
23
24 pen.Dispose();
25 }
여러 개의 직사각형 상자 그리기는 한 개의 직사각형 상자를 그리는 것보다 지난번의 그리기를 자동으로 취소할 수 없습니다.pictureBox에 그려진 직사각형 상자를 어떻게 취소합니까?
여러 개의 사각형 상자를 그리는 원리는 여러 개의 시작점과 끝점을 그룹에 넣는 것이다. Paint 방법을 호출할 때 이 점을 다시 한 번 그리면 이 사각형을 그리는 것을 취소하면 그룹의 점을 삭제할 수 있고 Paint 방법을 호출하면 이 사각형을 삭제할 수 있다!
코드는 다음과 같습니다.
1 multiAreaPoint.Clear();
2 pic.Refresh();
pic.Refresh();Paint 메소드를 호출하기 위해서입니다.
만약 다른 견해나 다른 실현 방법이 있다면 저와 교류하는 것을 환영합니다.
전재 대상:https://www.cnblogs.com/wangzhiying/p/10100847.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.