从一个表格绘制到另一个表格,而另一个是 closing/closed

Drawing from one Form on another while the one is closing/closed

我正在用 c# 为学校编程。我有 2 个表单,当我关闭子表单时,我想在父表单上画一些东西,我不想使用任何我必须在之后单击的按钮。这是我试过的方法,但没有用。

private void button1_Click(object sender, EventArgs e)
    {    
      this.Close(); //Closes Form2(Child)
    }
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        Form1 f1 = new Form1();
        Graphics g;
        g = f1.CreateGraphics();
        g.DrawRectangle(Pens.Black, 100, 100, 50, 50);
    }

我也尝试过使用 FormClosed 事件。

在您的父表单上,当您初始化子表单时,将其 Owner 属性 设置为 this:

var form2 = new Form2();
form2.Owner = this;

然后从子窗体,您可以通过这样做访问父窗体:

Graphics g;
g = ((Form1)this.Owner).CreateGraphics();
g.DrawRectangle(Pens.Black, 100, 100, 50, 50);

考虑到你的Form1是父窗体,Form2是你的子窗体,即Form2最初是从Form1调用的。然后您应该首先将您的 Form1 副本发送到您正在创建的新 Form2,将其存储在一个私有字段中,并在关闭时使用它来绘制它。类似于:

private Form1 _parent;
public Form2(Form1 parent)
{
  _parent = parent;
}
private void button1_Click(object sender, EventArgs e)
{    
  this.Close(); //Closes Form2(Child)
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    Graphics g = _parent.CreateGraphics();
    g.DrawRectangle(Pens.Black, 100, 100, 50, 50);
}

同样在父级上,你应该有类似的东西:

private void button1_Click(object sender, FormClosingEventArgs e)
{
  Form2 form2 = new Form2(this);
  form2.Show();
}

您发布的代码的问题是您正在创建一个新的 Form1,它与打开时已有的原始 Form1 object/instance 不同新实例 Form2.