前言
窗体至另一个窗体出现页面“闪现”的问题,影响用户体验。
解决方案
1.应用:①窗体跳转至②窗体时,①窗体隐藏,②窗体打开
实例:②窗体打开后,通过时间事件将①窗体隐藏。
具体步骤:
1.在②窗体中引入时间事件,使其运行隐藏①窗体
private void StockQuery_Load(object sender, EventArgs e)
{
#region 处理跳转窗体 闪现的问题
try
{
timer2 = new Timer();
timer2.Interval = 300;
timer2.Enabled = true;
timer2.Tick += timer2_Tick;
}
catch (Exception ex)
{
//
}
#endregion
}
2.②窗体的时间事件,用于在①窗体跳转至②窗体时,隐藏①窗体
//本界面加载时,将上一界面隐藏——窗体跳转问题
private void timer2_Tick(object sender, EventArgs e)
{
this.backpage.Hide();
this.timer2.Enabled = false;//隐藏后时间事件关闭
}
2.应用:②窗体跳转至①窗体时,②窗体关闭,①窗体从隐藏至显示。
实例:1.①窗体从隐藏至显示时,通过时间事件将②窗体关闭。
具体步骤:
1.在①窗体引入时间事件,使其运行关闭②窗体
private void Query_Load(object sender, EventArgs e)
{
#region 处理跳转窗体 闪现的问题
try
{
timer2 = new Timer();
timer2.Interval = 300;
timer2.Enabled = true;
timer2.Tick += timer2_Tick;
}
catch (Exception ex)
{
//
}
#endregion
}
2.①窗体的时间事件,用于在②窗体返回至①窗体时,关闭②窗体。
private void query_Timer_Tick(object sender, EventArgs e)
{
if (this.IsHandleCreated) {
this.Invoke(new MethodInvoker(delegate {
try
{
//遍历打开的窗体
foreach (Form item in Application.OpenForms)
{
if (item is StockQuery || item is AreaQuery || item is LogQuery)
{
//①界面显示 并且与②界面中设置的名称一致时。关闭②界面
if (this.Visible && (item.Text == "StockQuery1"||item.Text=="AreaQuery1"||item.Text=="LogQuery1")) {
//关闭库存窗口
item.Close();
}
/* if (item == null || item.CanFocus == false)
{
this.query_Timer.Enabled = false;//②窗体关闭时,时间事件关闭
}
*/
}
}
}
catch
{
};
}));
}
}
ps:从②窗体返回时,将该窗体的名称进行更改,以便于判断此。(eg:item.Text==“StockQuery1”)
3.再次从①窗体跳转至②窗体时,需要重新开启在①窗体的时间事件。
//库存查询
private void btn_StockQuery_Click(object sender, EventArgs e)
{
this.Invoke(new Action(() =>
{
StockQuery stockQuery = new StockQuery(this);
stockQuery.Show();
this.query_Timer.Enabled = true;//重新开启时间事件
//this.Hide();
}));
}