-2

我正在用 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 事件。

4

2 回答 2

0

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

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

然后从子窗体中,您可以通过以下方式访问父窗体:

Graphics g;
g = ((Form1)this.Owner).CreateGraphics();
g.DrawRectangle(Pens.Black, 100, 100, 50, 50);
于 2015-11-19T18:42:18.870 回答
0

考虑到您的 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,它与您在打开新实例 Form2 时已经拥有的原始 Form1不同的对象/实例。

于 2015-11-19T18:42:34.807 回答