在同一表单上添加新坐标

时间:2018-02-19 13:54:44

标签: c# winforms

当在表单1的文本框中输入圆圈的坐标并单击按钮时,我的代码在表单2上绘制一个圆圈。问题是,每次在表格1中输入坐标时,新的表格2将打开而不是旧表格更新。

第一表格上的代码

private void button1_Click(object sender, EventArgs e)
{
    int r1, r2;
    setValue = textBox1.Text;
    setValue1 = textBox2.Text;
    Int32.TryParse(setValue, out r1);
    Int32.TryParse(setValue1, out r2);
    Form2 f2 = new Form2();
    //// f2.Show();
    // f2.addcoordinate(r1,r2);
    // f2.Update();
    Graphics g2;
    g2 = f2.CreateGraphics();
    Class1 add = new Class1();
    add.addcoordinate(r1,r2);
}

Class1中的代码

public void addcoordinate(int r1, int r2)
{
   // MessageBox.Show(r1.ToString());
    Form2 f2 = new Form2();
    f2.addcoordinate(r1, r2);
    f2.Show();
}

Form2上的代码

private List<Point> circleCoordinates = new List<Point>();

public Form1()
{
    InitializeComponent();
}

public void addcoordinate(int r1, int r2)
{
    this.circleCoordinates.Add(new Point(r1, r2));
}

protected override void OnPaint(PaintEventArgs e)
{
    // linedrawing goes here
    foreach (Point point in this.circleCoordinates)
    {
        e.Graphics.DrawEllipse(Pens.Black, new Rectangle(point, new 
        Size(10, 10)));
    }

    base.OnPaint(e);
}

请建议。

1 个答案:

答案 0 :(得分:1)

Form1中,您定义f2如下:

Form2 f2 = new Form2();

每次运行这行代码时,它都会创建一个新的对象实例。这就是您每次点击按钮时都会看到新表单的原因。

通过在类中的方法之外移动上面提到的代码行,在Form2类和所有私有方法中定义Form1对象。然后在方法内的代码中使用您已声明的Form2的特定实例(在本例中为f2)。这样,您正在处理该类的同一实例,并且每次单击Form2时都不会创建对象button1的新实例。