C#winform介面重新整理
阿新 • • 發佈:2018-12-31
本文要實現的功能,是使用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();
}
}
}