在Windows Form平臺下實作視窗跳轉,常見的有以下幾種方式,比如通過Show/ShowDialog方法顯示新的視窗,通過多檔案界面(MDI)在父視窗中加載子視窗,或者是通關過在視窗中動態加載自定義控制元件,比如通過將視窗中的Panel控制元件作為容器,將一些自定義元素作為視圖界面控制元件,動態加載到Panel控制元件中,下面我們將簡單介紹這幾種方式
Show/ShowDialog
通過這兩種方法可以很簡單的實作視窗跳轉,
Home home = new Home();
home.Show();
Home home = new Home();
home.ShowDialog();
通過Show方法可以顯示非模式表單,實際是將視窗設定為表單的頂級物件,顯示表單等效于將Visible屬性設定為true, 呼叫Show方法后,Visible屬性回傳一個true值,直到呼叫Hide方法為止,
而ShowDailog方法就是將表單顯示為一個模式對話框,只有將對話框關閉之后才會執行之后的代碼,
Home home = new Home();
home.Show();
//home.ShowDialog();
Debug.WriteLine("彈出Home視窗");//使用Show方法時,程式顯示視窗后會繼續執行輸出代碼,而ShowDialog只有將顯示的視窗關閉后才會繼續執行
MDI視窗
這種方式實際上是通過創建一個MDI父視窗容器,然后讓各個子視窗顯示到父視窗容器中,
首先我們需要將父視窗的IsMdiContainer屬性設定為True(確定是否將視窗設定為MDI容器),然后具體的跳轉代碼如下
// 加載登錄視窗
private void Form_Container_Load(object sender, EventArgs e)
{
Login login = new Login();
login.MdiParent = this;
login.Show();
}
// 登錄實作
private void button1_Click(object sender, EventArgs e)
{
// 賬號密碼驗證
// ...
Home home = new Home();
home.MdiParent = this.MdiParent;
home.Show();
}

從上圖中,如果根據平時的一些軟體開發需求,我們看到這樣的顯示是有一些問題的,比如,登錄和主選單頁面重疊顯示,子頁面帶有邊框等等,
在子視窗的加載事件中,增加視窗邊框的處理如下
private void Login_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.None;//將視窗設定無邊框模式,即去掉邊框和最大化等按鈕
this.WindowState = FormWindowState.Maximized;//將子視窗設定為最大化,即在父容器中起到居中的效果
}
通過單例模式,創建一個全域容器實體,并提供一個公共的子視窗加載方法
static Form_Container instance;
public static Form_Container Instance
{
get
{
if (instance == null)
{
instance = new Form_Container();
}
return instance;
}
}
public void LoadChildPage(Form form)
{
// 每次加載子視窗的時候關閉其他視窗
foreach (var item in instance.MdiChildren)
{
item.Close();
}
form.MdiParent = instance;
form.Show();
}
現在我們可以通過下面的方式進行子頁面的切換
Form_Container.Instance.LoadChildPage(new Login());
Form_Container.Instance.LoadChildPage(new Home());

動態加載子控制元件
這種方式的實作與MDI的方式類似,我們先創建UC_Loging和UC_Home兩個自定義控制元件作為子頁面;然后創建一個容器視窗Form_Container,在Form_Container中放一個Panel控制元件作為子頁面的容器,通過將自定義控制元件系結到panel實作頁面切換的效果,
public partial class Form_Container : Form
{
public Form_Container()
{
InitializeComponent();
}
static Form_Container instance;
public static Form_Container Instance
{
get
{
if (instance == null)
{
instance = new Form_Container();
}
return instance;
}
}
public Panel PnlContainer
{
get { return pnlContainer; }
set { pnlContainer = value; }
}
public void LoadChildPage(Control control)
{
PnlContainer.Controls.Clear();
PnlContainer.Controls.Add(control);
}
private void Form_Container_Load(object sender, EventArgs e)
{
Form_Container.Instance.LoadChildPage(new UC_Login());
}
}

以上就是在Windows Form程式開發程序中常見的頁面切換的方式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/9620.html
標籤:C#
上一篇:C# 9.0 終于來了, Top-level programs 和 Partial Methods 兩大新特性探究
