winform跳转窗体“闪现”现象的处理

文章介绍了如何解决窗体在跳转过程中导致的页面“闪现”问题,从而提升用户体验。通过在窗体之间使用时间事件来控制窗体的隐藏和显示,例如在窗体①跳转到窗体②时,①窗体隐藏,②窗体打开;从②返回①时,②窗体关闭,①窗体显示。这种方法可以避免页面切换时的不顺畅感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

窗体至另一个窗体出现页面“闪现”的问题,影响用户体验。

解决方案

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();
            }));
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiAngTxone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值