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