我在从屏幕上删除DrawReversibleFrame时遇到问题。文档说两次输入该函数以删除它,但似乎它不适用于我的逻辑布局。
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApp6
{
public partial class Form1 : Form
{
private Point? _start;
private Rectangle _previousBounds;
public Form1()
{
InitializeComponent();
}
private void OnMouseDown(object sender,MouseEventArgs e)
{
_start = e.Location;
}
private void OnMouseMove(object sender,MouseEventArgs e)
{
if (_start.HasValue)
{
ReverseFrame();
DrawFrame(e.Location);
}
}
private void OnMouseUp(object sender,MouseEventArgs e)
{
ReverseFrame();
_start = null;
}
private void ReverseFrame()
{
ControlPaint.DrawReversibleFrame(_previousBounds, Color.Red, FrameStyle.Dashed);
}
private void DrawFrame(Point end)
{
ReverseFrame();
var size = new Size(end.X - _start.Value.X, end.Y - _start.Value.Y);
_previousBounds = new Rectangle(_start.Value, size);
_previousBounds = RectangleToScreen(_previousBounds);
ControlPaint.DrawReversibleFrame(_previousBounds, Color.Red, FrameStyle.Dashed);
}
}
}
当我在表单上拖动鼠标时,这是我的结果。 http://imgur.com/a/Kh4h7
pesudo代码应该像我一样工作,我觉得我在做。
的MouseDown:
绘制矩形。
保存矩形边界。
-
MouseMove(带左按钮):
重绘以前的矩形以进行擦除。
计算下一个矩形。
绘制下一个矩形。
保存矩形边界。
冲洗/重复(无限期)
-
的MouseUp:
重绘最后一个要擦除的矩形。
答案 0 :(得分:0)
示例中的MouseUp处理程序是兴趣点。
private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// If the MouseUp event occurs, the user is not dragging.
isDrag = false;
// Draw the rectangle to be evaluated. Set a dashed frame style
// using the FrameStyle enumeration.
ControlPaint.DrawReversibleFrame(theRectangle, this.BackColor, FrameStyle.Dashed);
// Find out which controls intersect the rectangle and
// change their color. The method uses the RectangleToScreen
// method to convert the Control's client coordinates
// to screen coordinates.
Rectangle controlRectangle;
for (int i = 0; i < Controls.Count; i++)
{
controlRectangle = Controls[i].RectangleToScreen(Controls[i].ClientRectangle);
if (controlRectangle.IntersectsWith(theRectangle))
{
Controls[i].BackColor = Color.BurlyWood;
}
}
// Reset the rectangle.
theRectangle = new Rectangle(0, 0, 0, 0);
}
具体来说,我在测试时将以下行置于评论之下并获得与您相同的结果。
// ControlPaint.DrawReversibleFrame(theRectangle, this.BackColor, FrameStyle.Dashed);
<强>更新强>
我测试了你的代码。我认为你的矩形_previousBounds第二次没有被绘制。