我有2個窗體。 Form1和Form2。在form1中是一個按鈕,當我點擊它時,然後打開form2並隱藏form1。關閉窗體2並顯示窗體1
但現在,我不知道該怎麼辦,如果我關閉Form2並顯示form1。
問題2: 如果我在Form1(標籤,按鈕)中的元素的窗體方法Update()中。我可以在form2中使用這種方法嗎?
感謝
我有2個窗體。 Form1和Form2。在form1中是一個按鈕,當我點擊它時,然後打開form2並隱藏form1。關閉窗體2並顯示窗體1
但現在,我不知道該怎麼辦,如果我關閉Form2並顯示form1。
問題2: 如果我在Form1(標籤,按鈕)中的元素的窗體方法Update()中。我可以在form2中使用這種方法嗎?
感謝
您提出的兩個問題都可以通過事件輕鬆解決。下面是代碼:
Form1中:
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以創建窗口2,註冊自己的事件,隱藏iteself,並顯示窗體2。當「更新按鈕」(form2的button1)被點擊時,它將在Form1上進行一些更新。對於這個演示,我只是改變Form1的背景顏色。當form2關閉時,其關閉的事件將觸發回form1,這將通過使其自身再次可見來處理事件。
添加窗體2的Form.FormClosing在Form1的事件處理程序。當它觸發時,再次顯示Form1。
您必須使用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();
}
不要這樣做,Form2不應該知道有關Form1的任何信息。只需將FormClosing事件處理程序放在Form1中。不要忘記檢查e.Cancel。並且請注意,您不需要再設置所有者,它只是* this *。 –
@HansPassant true,非常感謝。我不知道爲什麼我以其他方式做了:(但是改變了我的代碼。 – gzaxx