只是想知道如何实际选择我绘制的矩形然后能够移动它?我还需要删除它,但我可以解决这个问题。关于我需要做什么,只是有点迷失。伪代码或实际代码很好,只是一个垫脚石将不胜感激。
此外,如果其他人知道如何在listBox中实际显示矩形X和Y,那也很棒。但目前,最重要的问题是优先考虑。
这是我绘制矩形的方式:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (buttonDown)
{
if (pictureBox1.Image != null)
{
draw = true;
Graphics g = Graphics.FromImage(imageFile);
Pen pen1 = new Pen(color, 4);
g.DrawRectangle(pen1, e.X - 5, e.Y - 5, 5, 5);
g.Save();
pictureBox1.Image = imageFile;
}
}
}
答案 0 :(得分:2)
为了实现此类行为,您必须存储有关矩形的信息。例如。在这样的课程中:
class Rect
{
int X { get; set; }
int Y { get; set; }
int Width { get; set; }
int Height { get; set; }
}
请注意,已有Rectangle
类型。你也可以使用它,但由于它是一个结构,你必须以不同的方式处理选择。
现在您可以创建一个矩形列表和选择:
List<Rect> rects = new List<Rect>();
Rect selectedRect = null;
在列表框中显示这些rects非常简单。只需将列表框的项目绑定到列表即可。您可能需要覆盖ToString()
才能获得用户友好的输出。
绘制矩形可能如下所示:
foreach(var r in rects)
{
g.DrawRectangle(pen1, r.X, r.Y, r.Width, r.Height);
...
}
您可以突出显示所选的矩形。例如。使用不同的笔或其他矩形:
if(selectedRect == r)
g.DrawRectangle(pen1, r.x - 5, r.Y - 5, r.Width + 10, r.Height + 10);
在MouseDown
事件或其他适当的事件中,您可以将选择设置为单击的矩形:
foreach(var r in rects)
if(e.X >= r.X && e.X <= r.X + r.Width && e.Y >= r.Y && e.Y <= r.Y + r.Height)
selectedRect = r;
要移动矩形,您将保存已单击的矩形点(距离左上角的距离)。在鼠标移动事件中,检查左侧按钮是否已关闭,并相应地重新定位selectedRect
。