我有 2 个表格。表格 1 和表格 2。在form1中是一个按钮,当我点击它时,打开form2并隐藏form1。
但是现在,如果我关闭 Form2 并显示 form1,我不知道该怎么做。
问题 2:如果我有 Form1 中元素(标签、按钮)的表单方法 Update()。我可以在 form2 中使用这种方法吗?
谢谢
你必须使用FormClosing
事件。在您创建的代码中,form2
将您的附加form1
到关闭事件。这就是为什么你form1
会知道form2
被关闭的原因。
private void OpenForm()
{
var form2 = new Form2();
form2.FormClosing += FormIsClosing;
form2.Show();
this.Hide();
}
private void FormIsClosing(object sender, FormClosingEventArgs e)
{
if (e.Cancel)
{
return;
}
this.Show();
this.Update();
}
您提出的两个问题都可以通过事件轻松解决。这是代码:
表格1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Declare your new form
Form2 form2 = new Form2();
//Register the update event
form2.updateEvent += new EventHandler(handleUpdateEvent);
//Register form closed event
form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
Visible = false;
//Show your new form
form2.Show();
}
void form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Visible = true;
}
//Handler for the event from form 2
void handleUpdateEvent(object sender, EventArgs e)
{
this.BackColor = Color.Red;
}
}
表格2:
public partial class Form2 : Form
{
//Declare your event
public event EventHandler updateEvent;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//If the event is registered fire it, otherwise do nothing
if (updateEvent != null)
{
//fire the event and give our custom event args some text
updateEvent(sender, e);
}
}
private void button2_Click(object sender, EventArgs e)
{
//Another way to close the form, beside clicking the red "X"
Close();
}
}
单击 Form1 上的按钮会导致 form1 创建 form2、注册其事件、隐藏自身并显示 form2。单击“更新按钮”(form2 的 button1)时,会对 Form1 进行一些更新。对于这个演示,我只是更改 Form1 的背景色。当 form2 关闭时,它的关闭事件将返回给 form1,它会通过使自己再次可见来处理该事件。
在 Form1 中为 Form2 的Form.FormClosing添加一个事件处理程序。当它触发时,再次显示 Form1。