当一个表格关闭/关闭时,从另一个表格中绘制

时间:2015-11-19 18:35:37

标签: c# winforms drawing multiple-forms

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

2 个答案:

答案 0 :(得分:0)

在您的父表单上,初始化子表单时,将其public ArrayList<Contact> deserializer(String jsonString){ //Type collectionType = new TypeToken<Collection<Contact>>(){}.getType(); // Collection<Contact> enums = gson.fromJson(jsonString, collectionType); ArrayList<Contact> contactsList = (new Gson()).fromJson(jsonString,new TypeToken<ArrayList<Contact>>() {}.getType()); return contactsList; } 属性设置为Owner

this

然后从子表单中,您可以通过以下方式访问父级:

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

答案 1 :(得分: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不同。 object / instance