C#多個Form視窗切換有三種方法:
1.將要顯示的Form的Visiable設為true,然後將其餘Form的Visiable設為false。
2.使用Form的Show
3.使用Form的ShowDialog
在說三種方法之前,先開個新的C# Windows Form Project
之後在右邊的方案總管,找個空的地方點選滑鼠右鍵→加入→新增項目
之後在Form1放上一些元件做為測試使用,而這些元件的Name都使用預設值(也就是button1、textbox1)
Form2也一樣
Form1的textbox1和Form2的button1、button2是給第三種方法測試使用的,另外兩種方法用不到
第一種方法、
對Form1的button1雙擊,之後開始編寫如下的程式碼
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//當按鈕被按下時
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f = new Form2();//產生Form2的物件,才可以使用它所提供的Method
this.Visible = false;//將Form1隱藏。由於在Form1的程式碼內使用this,所以this為Form1的物件本身
f.Visible = true;//顯示第二個視窗
}
}
}
然後Form2的程式碼可以寫或不寫(要寫也是同Form1的方式,只是改成將自己隱藏並且顯示Form1)
使用這種方法的缺點:
1.物件只是隱藏,並沒有關閉,所以還是會占用記憶體。
2.若使用者切換成新的視窗後,將新出來的視窗關閉,則原先的視窗會繼續隱形。
第二種方法、
對Form1的button1雙擊,之後開始編寫如下的程式碼
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//當按鈕被按下時
private void button1_Click(object sender, System.EventArgs e)
{
Form2 f = new Form2();//產生Form2的物件,才可以使用它所提供的Method
f.Show(this);//設定Form2為Form1的上層,並開啟Form2視窗。由於在Form1的程式碼內使用this,所以this為Form1的物件本身
/* 下面這段程式碼的用處在於是否要將Form2始終顯示在Form1上面。
* f.TopMost
其為布林值,true代表要始終顯示在上面;false代表Form1可以在Form2上面,預設為true。*/
}
}
}
Form2則不用編寫任何程式碼,保持預設值即可。
使用這種方法的缺點:
1.由於可以越過Form2直接點選Form1,將造成使用者可以重複點選Form1的按鈕,不斷的開啟新的Form2
第三種方法、
這個方法可以傳回使用者在新的表單做了哪些事情...
對Form1的button1雙擊,之後開始編寫如下的程式碼
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//當按鈕被按下時
private void button1_Click(object sender, System.EventArgs e)
{
textBox1.Text = "";//先清空textbox1的文字
Form2 f = new Form2();//產生Form2的物件,才可以使用它所提供的Method
f.ShowDialog(this);//設定Form2為Form1的上層,並開啟Form2視窗。由於在Form1的程式碼內使用this,所以this為Form1的物件本身
if (f.DialogResult == System.Windows.Forms.DialogResult.OK)
{
//若使用者在Form2按下了OK,則進入這個判斷式
textBox1.Text = "按下了" + f.DialogResult.ToString();
}
else if (f.DialogResult == System.Windows.Forms.DialogResult.Cancel)
{
//若使用者在Form2按下了Cancel或者直接點選X關閉視窗,都會進入這個判斷式
textBox1.Text = "按下了" + f.DialogResult.ToString();
}
else
{
textBox1.Text = "按下了" + f.DialogResult.ToString();
}
}
}
}
再來就是在Form2內編寫程式碼
using System.Windows.Forms;
namespace Test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
button1.DialogResult = System.Windows.Forms.DialogResult.OK;//設定button1為OK
button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;//設定button為Cancel
}
}
}
執行後就會發現,當按下Form1的按鈕後會出現Form2,但是此時不管怎麼點Form1都不會去觸碰到Form1的元件
且在Form2按下button1、button2、直接選擇X關閉視窗,都會在Form1的textbox1顯示出對應的回應
留言列表