我設計了一個名為 form1 的登錄表單,并且在 form1 的面板中顯示了另外 2 個表單 form2,form3 form2 專案,當我單擊面板中的按鈕(來自 form2 的專案)想要顯示 form2 和隱藏 form1 但代碼不起作用
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
Form3 frm3 = new Form3();
frm1.Hide();
frm3.Show();
};
form3 正在打開,但 form1 沒有隱藏
uj5u.com熱心網友回復:
它沒有隱藏,因為您為 form1 創建了一個已經實體化的新實體。您必須在Hide()用于呼叫該方法的同一實體上呼叫該Show()方法。如果您在 form1 類中添加了此代碼,則像這樣更改它
private void button1_Click(object sender, EventArgs e)
{
Form3 frm3 = new Form3();
frm3.Show();
this.Hide();
};
uj5u.com熱心網友回復:
您在代碼片段中創建了這兩種形式。我認為,Form1 不是您要關閉的表單。frm1 只是 Form1 的另一個實體,而不是 Form1 的 openend 實體。您必須在任何地方都有另一個 Form1 實體。您必須對正確的實體使用正確的參考。
uj5u.com熱心網友回復:
重要的是要知道 WinForms 創建啟動表單的實體。在我們的例子中,啟動表單是 Form1。所以,當你說
Form1 frm1 = new Form1();
您實際上是在創建 Form1 的新(第二個)實體。這意味著,在代碼中,有兩個不同的 Form1。
我們要做的是檢查我們的應用程式以獲取已經存在的 Form1 的實體。
// This goes in Form2. It returns an instance of Form1, if it exists.
private Form getForm1()
{
// Application holds information about our application, such as which forms are currently open.
var formCollection = System.Windows.Forms.Application.OpenForms;
// Now we loop through the open forms in search of the form we want, Form1.
foreach (Form frm in formCollection)
{
if (frm.Name.Equals("Form1"))
{
return frm;
}
}
return null;
}
現在我們可以獲得 Form1 的現有實體,我們可以使用它來隱藏表單。
private void button1_Click(object sender, EventArgs e)
{
var form1 = getForm1();
if (form1 != null) form1.Hide();
}
這里要知道的是,當表單被隱藏時,它不會關閉。因此,我們需要確保 Form1 再次可見。例如,我們可以將 Form1 設定為 Form2 關閉時可見。
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
// The question mark (?) checks to see if the result of
// getForm1() is null. Same thing that is happening in
// button1_click
getForm1()?.Show();
}
完成 Form2 代碼
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var frm1 = getForm1();
var frm3 = new Form3();
if (frm1 != null) frm1.Hide();
frm3.Show();
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
// The question mark (?) checks to see if the result of getForm1() is null. Same thing that is happening in button1_click
getForm1()?.Show();
}
// This goes in Form2. It returns an instance of Form1, if it exists.
private Form getForm1()
{
// Application holds information about our application, such as which forms are currently open.
// Note that Open and Visible have different definitions.
var formCollection = System.Windows.Forms.Application.OpenForms;
// Now we loop through the open forms in search of the form we want, Form1.
foreach (Form frm in formCollection)
{
if (frm.Name.Equals("Form1"))
{
return frm;
}
}
return null;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465206.html
