C#之如何實(shí)現(xiàn)多個(gè)子窗體切換效果
C#實(shí)現(xiàn)多個(gè)子窗體切換效果
C#的在主窗體中實(shí)現(xiàn)多個(gè)子窗體相互切換的效果主要依托于panel容器和Controls函數(shù)。
和大家分享一下在C#的winform開發(fā)中如何實(shí)現(xiàn)借助一個(gè)主窗體來實(shí)現(xiàn)內(nèi)部多個(gè)子窗體的切換效果。
先來看一下主窗體中多個(gè)小窗體切換的效果

多窗體切換的原理
多窗體切換的原理其實(shí)是借助一個(gè)panel容器,在該容器中顯示相同大小的窗口
建立多窗口切換的步驟
1.新建一個(gè)主窗體并在其中放置適當(dāng)?shù)目丶?/h3>
包括進(jìn)行切換的按鈕和顯示窗體的panel容器,在這里要注意:將要顯示的子窗體就是在該panel容器中顯示的,
效果如下:

2.新建用于在主窗體中顯示的子窗體
子窗體的新建其實(shí)是一個(gè)用戶控件(Windows窗體),在這里我們可以在狀態(tài)欄中右擊選擇—>添加—>用戶控件(Windows窗體)

3.設(shè)置子窗體的尺寸和panel容器的尺寸相等
目的是為了在panel容器中顯示時(shí)不會(huì)溢出。
在這里我們?yōu)榱吮阌趨^(qū)分三個(gè)不同的子窗體,設(shè)置窗體的不同顏色,并在窗體中進(jìn)行提示。

4.以同樣的方式建立子窗體二和子窗體三

窗體三

5.在主窗體的代碼中定義相應(yīng)的三個(gè)窗口變量
public UserControl1 f1; //創(chuàng)建用戶控件一變量
public UserControl2 f2; //創(chuàng)建用戶控件二變量
public UserControl3 f3; //創(chuàng)建用戶控件三變量6.在Form1_Load函數(shù)中對三個(gè)變量進(jìn)行賦值
也就是對三個(gè)對象進(jìn)行實(shí)例化
private void Form1_Load(object sender, EventArgs e)
{
f1 = new UserControl1(); //實(shí)例化f1
f2 = new UserControl2(); //實(shí)例化f2
f3 = new UserControl3(); //實(shí)例化f3
}7.由于我們的窗體切換是點(diǎn)擊相應(yīng)的按鈕觸發(fā)的
所以我們要為相應(yīng)的按鈕控件設(shè)置觸發(fā)事件。
雙擊主窗體中的按鈕進(jìn)入相應(yīng)的觸發(fā)函數(shù),在這里我們要使用如下的代碼對相應(yīng)的子窗體進(jìn)行顯示:
//顯示窗體一
private void button1_Click(object sender, EventArgs e)
{
f1.Show(); //將窗體一進(jìn)行顯示
panel2.Controls.Clear(); //清空原容器上的控件
panel2.Controls.Add(f1); //將窗體一加入容器panel2
}
//顯示窗體二
private void button2_Click(object sender, EventArgs e)
{
f2.Show(); //將窗體二進(jìn)行顯示
panel2.Controls.Clear(); //清空原容器上的控件
panel2.Controls.Add(f2); //將窗體二加入容器panel2
}
//顯示窗體三
private void button3_Click(object sender, EventArgs e)
{
f3.Show(); //將窗體三進(jìn)行顯示
panel2.Controls.Clear(); //清空原容器上的控件
panel2.Controls.Add(f3); //將窗體三加入容器panel2
}8.完成之后運(yùn)行窗口
點(diǎn)擊相應(yīng)的按鈕,在panel2容器中就可以呈現(xiàn)出相應(yīng)的界面。

最后附上完整源碼
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 window_cut
{
public partial class Form1 : Form
{
public UserControl1 f1; //創(chuàng)建用戶控件一變量
public UserControl2 f2; //創(chuàng)建用戶控件二變量
public UserControl3 f3; //創(chuàng)建用戶控件三變量
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
f1 = new UserControl1(); //實(shí)例化f1
f2 = new UserControl2(); //實(shí)例化f2
f3 = new UserControl3(); //實(shí)例化f3
}
//顯示窗體一
private void button1_Click(object sender, EventArgs e)
{
f1.Show(); //將窗體一進(jìn)行顯示
panel2.Controls.Clear(); //清空原容器上的控件
panel2.Controls.Add(f1); //將窗體一加入容器panel2
}
//顯示窗體二
private void button2_Click(object sender, EventArgs e)
{
f2.Show(); //將窗體二進(jìn)行顯示
panel2.Controls.Clear(); //清空原容器上的控件
panel2.Controls.Add(f2); //將窗體二加入容器panel2
}
//顯示窗體三
private void button3_Click(object sender, EventArgs e)
{
f3.Show(); //將窗體三進(jìn)行顯示
panel2.Controls.Clear(); //清空原容器上的控件
panel2.Controls.Add(f3); //將窗體三加入容器panel2
}
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
分析C# Dictionary的實(shí)現(xiàn)原理
對于C#中的Dictionary類相信大家都不陌生,這是一個(gè)Collection(集合)類型,可以通過Key/Value(鍵值對的形式來存放數(shù)據(jù);該類最大的優(yōu)點(diǎn)就是它查找元素的時(shí)間復(fù)雜度接近O(1)。那么什么樣的設(shè)計(jì)能使得Dictionary類實(shí)現(xiàn)O(1)的時(shí)間復(fù)雜度呢2021-06-06
Unity?UGUI的GraphicRaycaster射線投射組件介紹使用
在C#中調(diào)用Python代碼的兩種實(shí)現(xiàn)方式

