【问题标题】:Extract and display parameter in a dialog?在对话框中提取和显示参数?
【发布时间】:2013-08-22 11:58:09
【问题描述】:

我正在开发一个小项目并将其打包到 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();
    }

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

【问题讨论】:

  • 您的描述是 C++,但标签是 C#。是哪个?
  • 你看源码了吗?
  • @mbeckish 我想知道 C# winforms 能否根据我在窗口上的操作返回参数?所以实际上我认为它是 c#。
  • @SriramSakthivel 我是 c# winforms 的新人。所以我的问题可能非常初级......我发现参考代码中有“x”“y”“宽度”和“高度”等参数,它们可能是我想要的参数。但我不知道如何获取它们并将它们显示在对话框中。
  • @QingyaoLi - 哪个部分是C++?

标签: c# winforms


【解决方案1】:

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

  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 以获取有关您可以做什么和应该做什么的更多信息

【讨论】:

    【解决方案2】:

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

    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
      //....
    };
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2015-08-10
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多