我创建了一个名为form2的新表单。
我尝试在form1 init函数上使用新的form2。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace c_charp_multiform
{
public partial class Form1 : Form
{
private Form2 form2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
form2 = new Form2();
form2.Show();
}
}
}
我可以成功显示form2,但是我没有按下按钮切换到form1,因为form2没有form1的任何实例。
如何通过form2上的按钮更改回来?
现在是form2代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace c_charp_multiform
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
//Don't know what to do next
}
}
}
非常感谢〜
答案 0 :(得分:2)
您可以像这样将Form1传递给Form2。
public partial class Form2 : Form
{
private Form1 m_frm
public Form2(Form1 frm)
{
InitializeComponent();
m_frm = frm;
}
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
m_frm.Show();
m_frm.Visible = true;
}
}
答案 1 :(得分:0)
表格1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace c_charp_multiform
{
public partial class Form1 : Form
{
//要建立form2的變數,這樣才能產生能夠傳參數的form
private Form2 form2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//將form1隱藏
this.Visible = false;
//將form2給new出來,new的同時將自己的記憶體位置傳給form2
//這樣到時候form2要切換回form1前就可以先設定要顯示form1
form2 = new Form2(this);
//顯示form2
form2.Show();
}
}
}
表格2:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace c_charp_multiform
{
public partial class Form2 : Form
{
private Form1 m_form1;
//在建立form2時得到form1的記憶體位置,
//這樣之後就可以改form1的參數,也就是將form1顯示出來
public Form2(Form1 p_form1)
{
InitializeComponent();
//將form1的記憶體位址存起來
m_form1 = p_form1;
}
/***
* 這個按鈕的主要供能是將form2切換回form1
**/
private void button1_Click(object sender, EventArgs e)
{
//將form2隱藏
this.Visible = false;
//顯示form1
m_form1.Visible = true;
//關閉form2
this.Close();
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
//顯示form1
//加這行的主要目的是避免使用者在form2時就將form2直接關閉,
//而不是按了切換回form1的按鈕後才關閉,
//因此這樣就會導致了form1還在隱藏而沒有被關閉的情況發生,但是也無法被控制。
//以寫程式來說,再次編寫程式就會編譯失敗
//以執行面來說,就會有多餘的process佔著cpu和記憶體空間,不划算。
m_form1.Visible = true;
//此時就可以關閉form1,當然沒有將form1切回visible也可以關閉,
//只是少了form1跳出立刻消失的關閉動畫~XD
m_form1.Close();
}
}
}