不用这么麻烦吧。
用这个 ControlPaint.DrawReversibleFrame 函数看看,是不是你要的效果。
除了这个函数还有 ControlPaint.DrawReversibleLine。
代码如下:
1 private Point start;
2 private Point old;
3 private bool isDown;
4
5 private void Form1_MouseDown(object sender, MouseEventArgs e)
6 {
7 this.start = ((Control) sender).PointToScreen(e.Location);
8 this.old = ((Control) sender).PointToScreen(e.Location);
9
10 this.isDown = true;
11 }
12
13 private void Form1_MouseMove(object sender, MouseEventArgs e)
14 {
15 if (this.isDown)
16 {
17 ControlPaint.DrawReversibleFrame(new Rectangle(start.X, start.Y, old.X - start.X, old.Y - start.Y), Color.Red, FrameStyle.Dashed);
18
19 this.old = ((Control)sender).PointToScreen(e.Location);
20
21
22 ControlPaint.DrawReversibleFrame(new Rectangle(start.X, start.Y, old.X - start.X, old.Y - start.Y), Color.Red, FrameStyle.Dashed);
23 }
24
25 }
26
27 private void Form1_MouseUp(object sender, MouseEventArgs e)
28 {
29 ControlPaint.DrawReversibleFrame(new Rectangle(start.X, start.Y, old.X - start.X, old.Y - start.Y), Color.Red, FrameStyle.Dashed);
30 this.isDown = false;
31 }