C# - 一种自动刷新页面功能的实现

本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。

我实现的效果如下图,这个DEMO定时刷新的是中间Label内文字的字体。

215401_EGTJ_1425762.png

实现这一功能,要考虑到如下几个方面:

1、这些选项最好可以在代码中以非常简便的方式添加,如构造一个函数,而不是在拉界面的时候手工添加,并逐一设置事件。如果手工添加事件,会造成每次增加或减少一个时间选项时,都要对其他所有选项的事件进行修改(至少各选项Checked属性的true和false会改)

2、用一个计时器来进行刷新时,“不启用”这个选项比较特殊,该选项只需要关闭计时器即可,其他的时间间隔选项都是先把计时器停掉,修改时间间隔后再将计时器打开

3、根据个人偏好(或业务需求),可以设定在每次变化自动刷新时间间隔后是否立即刷新一次,我的例子中,每次变化时间间隔后(选择“不启用”时除外),会立即刷新一次

界面上的控件如下:

221013_FQqW_1425762.png

窗体内代码如下:

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 RefreshTimelyDemo
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        string[] font = new[] 
            { 
                "宋体", "仿宋", "黑体", "微软雅黑", "幼圆", "隶书", "楷体",
                "华文新魏", "华文琥珀", "华文行楷", "华文彩云", "方正姚体", "方正舒体" 
            };

        /// <summary>
        /// 自动刷新时间间隔项
        /// </summary>
        LinkedList<ToolStripMenuItem> items = new LinkedList<ToolStripMenuItem>();
        /// <summary>
        /// 随机数种子
        /// </summary>
        Random random = new Random(DateTime.Now.Millisecond);
        /// <summary>
        /// 自动刷新计时器
        /// </summary>
        Timer timer = new Timer();

        private void Form1_Load(object sender, EventArgs e)
        {
            ToolStripMenuItem tsmiNone = new ToolStripMenuItem("不启用");
            tsmiNone.Click += (obj, arg) => 
            {
                foreach (ToolStripMenuItem item in items)
                {
                    item.Checked = 
                        item.GetHashCode() == tsmiNone.GetHashCode() ? true : false;
                }
                timer.Stop();
            };
            items.AddLast(tsmiNone);
            btnRefreshConfig.DropDownItems.Add(tsmiNone);
            btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
            AddRefreshOption("500毫秒", 500);
            AddRefreshOption("1秒", 1000);
            AddRefreshOption("5秒", 5000);
            btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
            AddRefreshOption("1分钟", 60000);
            AddRefreshOption("5分钟", 300000);
            AddRefreshOption("30分钟", 1800000);

            tsmiNone.Checked = true;
            timer.Tick += (obj, arg) =>
            {
                RefreshFont();
            };
        }

        /// <summary>
        /// 更新数据
        /// </summary>
        private void RefreshFont()
        {
            int num = random.Next(0, font.Length);
            lblText.Font = new Font(font[num], lblText.Font.Size);
            lblFontName.Text = font[num];
        }

        /// <summary>
        /// 添加刷新项
        /// </summary>
        /// <param name="text"></param>
        /// <param name="interval"></param>
        private void AddRefreshOption(string text, int interval)
        {
            ToolStripMenuItem tempItem = new ToolStripMenuItem(text);
            tempItem.Click += (obj, arg) =>
            {
                foreach (ToolStripMenuItem item in items)
                {
                    item.Checked = 
                        item.GetHashCode() == tempItem.GetHashCode() ? true : false;
                }
                timer.Stop();
                timer.Interval = interval;
                RefreshFont();
                timer.Start();
            };
            items.AddLast(tempItem);
            btnRefreshConfig.DropDownItems.Add(tempItem);
        }

        /// <summary>
        /// 手动刷新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRefresh_Click(object sender, EventArgs e)
        {
            RefreshFont();
        }

        /// <summary>
        /// 窗口退出前关闭计时器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            timer.Stop();
        }
    }
}

END

转载于:https://my.oschina.net/Tsybius2014/blog/546995

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值