winform窗体切换的时候,会透出后面的内容,比如说,开个浏览器还是什么别的,后面的背景会一闪而过,这样用户体验很不好,机缘巧合发现一个办法可以优化。。
思路:在窗体里面添加一个 panel ,在 panel 里面切换窗体
实现:
-
首先我们有三个窗体,第一个窗体 MainForm,主要是在这里切换别的窗体的,第二个IndexForm,首页的的窗体,用来展示第一个页面,第三个窗体,NextForm,这是第二个页面,用来跳转的
-
第一个窗体,MainForm,只有一个空窗体,里面放一个 panel1 ,在 Load 事件里面加载第二个窗体,就是第一个页面,代码如下
using System;
using System.Windows.Forms;
namespace FrontierApp
{
public partial class NoneForm : Form
{
public NoneForm()
{
InitializeComponent();
}
public Panel getPanel(){
return this.panel1;
}
private void NoneForm_Load(object sender, EventArgs e)
{
Index index = new Index(panel1);
index.TopLevel = false;
panel1.Controls.Clear();
index.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //设置窗体为非边框样式
index.Dock = System.Windows.Forms.DockStyle.Fill; //设置样式是否填充整个panel
panel1.Controls.Add(index);
index.Show();
}
}
}
-
第二个窗体就是第一个页面,这个页面上会有一个按钮跳转到第二个页面,
Panel _panel = new Panel(); //引入panel
this._panel = panel; //初始化的时候加载一下
//这里是跳转的代码,页面与页面之间跳转,就是用的这块
Index index = new Index(panel1);
index.TopLevel = false;
panel1.Controls.Clear();
index.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //设置窗体为非边框样式index.Dock = System.Windows.Forms.DockStyle.Fill; //设置样式是否填充整个panel
panel1.Controls.Add(index);
index.Show();
using System;
using System.Configuration;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using FrontierApp.HomepageAuth;
using FrontierApp.HttpRequest;
namespace FrontierApp.Temperature
{
public partial class PayByCard : Form
{
Index anotherForm;
Panel _panel = new Panel();
public PayByCard(Panel panel)
{
this._panel = panel;
InitializeComponent();
}
private void PayByCard_Load(object sender, EventArgs e)
{
}
//叉叉按钮返回首页
private void button1_Click(object sender, EventArgs e)
{
anotherForm = new Index(_panel);
anotherForm.TopLevel=false;
_panel.Controls.Clear();
anotherForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //设置窗体为非边框样式
anotherForm.Dock = System.Windows.Forms.DockStyle.Fill; //设置样式是否填充整个panel
_panel.Controls.Add(anotherForm);
anotherForm.Show();
}
}
}