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#刷新当前窗体

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

C#刷新控件的几种方法

Control.Update 方法 https://msdn.microsoft.com/zh-cn/library/9dc1yh37(v=vs.100).aspx 执行所有对绘制的挂起请求。...
  • cocoasprite
  • cocoasprite
  • 2015年01月27日 10:58
  • 5857

B窗体关闭时刷新A窗体的DataGridView

需求:A窗体中有一个DataGridView和一个添加按钮,我需要在DataGridView中添加一行信息,要求添加后DataGridView自动刷新。 实现思路:单击添加按钮,弹出B窗体,手动添加...
  • Gnd15732625435
  • Gnd15732625435
  • 2017年08月09日 21:11
  • 454

WinForm中异步刷新窗体

原帖地址: http://topic.csdn.net/u/20111108/09/07216bf6-d888-43c5-9192-87ffa4b4892c.html public class F...
  • sandy945
  • sandy945
  • 2011年11月08日 17:00
  • 7176

C#刷新父窗体

在C#开发基于winform的桌面应用程序中,时常会涉及到一些管理某些实体的业务,其中,这个“管理”就包括“增删改查”,在这些操作中,除了“查询”操作意外,另外的三个操作在执行完相应的“业务管理代码”...
  • u013871100
  • u013871100
  • 2016年07月14日 23:39
  • 609

利用委托事件实现Winform窗体之间的同步刷新

举例如下: 有两个界面A,B,下面要实现的功能是在界面A中执行完某项操作时,同步执行B界面中的方法,以达到刷新B窗体的目的 界面A中声明委托事件的代码如下: public delegate voi...
  • pp_fzp
  • pp_fzp
  • 2016年02月20日 19:20
  • 2564

C# 线程中更新界面控件

在我们开发软件时经常会需要跟新界面上的某个控件来显示相关的信息。 当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是...
  • u011518659
  • u011518659
  • 2017年01月19日 14:06
  • 3027

c#工作线程中去更新界面显示

c#工作线程中去更新界面显示
  • szsbell
  • szsbell
  • 2016年06月30日 10:06
  • 2969

C#实现多线程界面刷新

//这个问题也不知道难倒了多少C#豪杰。比起MFC的界面刷新,在WINFORM中来实现多线程刷新真是很痛苦,故写此文。 //多线程刷新界面主要用到多线程,委托,线程安全、事件等一系列高难度的C#操作...
  • yu12345678900
  • yu12345678900
  • 2015年08月18日 13:16
  • 2208

WinForm中刷新其他页面的方法

有时候在一个窗体中修改、添加或者删除数据后要在另外一个窗体的数据表中(如datagrid、datalist)中及时的反映更新的信息,这时必须对数据表进行刷新。可以通过对绑定数据源进行更新,如绑定源是一...
  • yap111
  • yap111
  • 2007年05月25日 21:32
  • 1689
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#winform界面刷新
举报原因:
原因补充:

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