1

我正在做一个小项目并将其打包到 GUI 中。参考源代码是DrawTools(Download source code - 61.1 Kb)

参考源代码演示了 C# WinForms 中的绘图工具。

功能是绘制不同的图形,如矩形、椭圆、多边形等。

我想利用这些图形的位置和大小信息做进一步的工作,所以如果我在绘图区绘制一个矩形,C# WinForms 是否可以返回这个图形的参数(例如。x,y,width,height 中的DrawRectangle.cs) ?

代码如下:

public DrawRectangle(int x, int y, int width, int height)
    {
        rectangle.X = x;
        rectangle.Y = y;
        rectangle.Width = width;
        rectangle.Height = height;
        Initialize();
    }

此外,如何获取返回的参数,然后在新对话框中显示?

4

2 回答 2

0

当您绘制这些形状时:矩形、椭圆、多边形等,您正在使用它们的位置、宽度和高度。如果您想将它们保存到一个对象中,请创建一个并将它们保存在其他结构的列表中......例如:

  List<object> shapes = new List<object>(); 

  private void drawSquare(int x1, int y1, int x2, int y2)
  {
     shapes.Add(new Rectangle(x1, y1, x2, y2));

  }

  protected override void OnPaint(PaintEventArgs e)
  {
     base.OnPaint(e);
     Graphics g = e.Graphics;

     foreach (var shape in shapes)
     {
        if (shape is Rectangle)
        {
           g.DrawRectangle(new Pen(Color.Black), (Rectangle)shape);
        }
     }
  }

这只是一个小例子,您应该检查OnPaint方法并Graphics获取有关您可以做什么和应该做什么的更多信息

于 2013-08-20T13:24:13.830 回答
0

您可以添加一些事件来支持通知正在发生的事情,如下所示:

public class InitRectangleEventArgs : EventArgs {
   public Rectangle Rectangle {get;set;}
}
public delegate void InitRectangleEventHandler(object sender, InitRectangleEventArgs e);
public event InitRectangleEventHandler InitRectangle;
public DrawRectangle(int x, int y, int width, int height)
{
    rectangle.X = x;
    rectangle.Y = y;
    rectangle.Width = width;
    rectangle.Height = height;
    if(InitRectangle != null) InitRectangle(this, new InitRectangleEventArgs { Rectangle = new Rectangle(x,y,width,height)});
    Initialize();
}
//To use it, just subscribe the event so that you can know the 
//info of the Rectangle everytime it is initialized
InitRectangle += (s,e) => {
  //Get the info from the Rectangle property of e:   e.Rectangle
  //....
};
于 2013-08-20T13:35:56.913 回答