C#winform界面刷新

原创 2016年05月30日 14:08:02

本文要实现的功能,是使用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();
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#在winform中页面跳转实现

大作业做管理系统时要实现登录功能,就像QQ登录一样,登录后登录界面自动关闭,原本以为实现没什么难的,谁知坑了我半个晚上一开始是这样写的 public partial class Form1 : For...

C#刷新当前窗体

最近找刷新窗口的办法看了好多,总觉得有些不好理解,然后自己就想了个办法: 点击刷新刷新按钮后,把控件全部移除,嗯~用的是this.Controls.Clear();,直接移除了窗口中的所有控件,然后...

C#中一个窗体怎样对另外一个窗体操作,使窗体上的数据得到刷新?

C#中一个窗体怎样对另外一个窗体操作,使窗体上的数据得到刷新? 2010-7-8 12:50 提问者: jenemarlin | 悬赏分:5 | 浏览次数:354次 情况是这样的...

C#winForm程序定时执行某各功能--定时检查更新

需要使用timer 定时器控件  timer1.Interval 设置时间间隔 timer1.Tick 到达时间间隔时触发事件 test_tick 时间处理函数 timer1....

C#下实现在ProgressBar控件上添加百分比

在利用C#编写Windows窗体程序的过程中,程序运行过程中界面如果没有一些提示总是感觉缺点儿什么,给用户的感觉不知道程序是否在运行,所以这是就想到了为程序添加进度条控件ProgressBar,但是进...

ASP.NET——GridView控件绑定数据

ASP.NET提供了许多种数据服务器控件,用于在Web页面中显示数据库中的表数据,GridView控件就是其中之一。这个控件和我们以前学过的DataGridView控件几乎是一样的,所以对GridVi...
  • zjx86320
  • zjx86320
  • 2014年07月25日 15:42
  • 12016

C#-WinForm跨线程修改UI界面的实例

  • 2017年11月14日 18:04
  • 47KB
  • 下载

C#版 Winform界面 Socket编程 Client客户端

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • blacop
  • blacop
  • 2016年10月20日 10:01
  • 521

C# 窗体(WInform)界面开发大全

  • 2014年08月25日 22:17
  • 7.18MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#winform界面刷新
举报原因:
原因补充:

(最多只允许输入30个字)