关闭

C#winform界面刷新

标签: 开发框架
3597人阅读 评论(0) 收藏 举报
分类:

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

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


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

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

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

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

界面上的控件如下:


窗体内代码如下:

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();
        }
    }
}
0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20845次
    • 积分:525
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:9篇
    • 译文:0篇
    • 评论:31条
    文章分类
    最新评论