【问题标题】:How to Select and Move a rectangle in a pictureBox?如何在图片框中选择和移动矩形?
【发布时间】:2012-10-03 07:01:15
【问题描述】:

只是想知道我将如何实际选择我绘制的矩形然后能够移动它?我还需要删除它,但我可以解决这个问题。只是有点迷失了我需要做什么。伪代码或实际代码都很好,只是一个垫脚石将不胜感激。

另外,如果其他人知道如何在 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;
            }                
        }           
    }

【问题讨论】:

  • 画框里只有一个矩形还是还有其他画?
  • 有什么问题?你想达到什么目的?

标签: c# select draw move


【解决方案1】:

为了实现这种行为,您必须存储有关矩形的信息。例如。在这样的课程中:

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;

在列表框中显示这些矩形非常简单。只需将列表框的项目绑定到列表即可。您可能需要覆盖 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

【讨论】:

  • 谢谢,让你更容易理解了!
猜你喜欢
  • 1970-01-01
  • 2012-05-13
  • 2018-04-16
  • 1970-01-01
  • 2023-03-21
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
相关资源
最近更新 更多